Java多態特性:重載和覆寫的比較,java多態特性重載
Java重載:
- 在同一個類中
- 方法具有相同的名字,相同或不同的返回值,但參數不同的多個方法(參數個數或參數類型)
public class MethoDemo{public static void main(String args[]){int one = add(10,20) ;// 調用整型的加法操作float two = add(10.3f,13.3f) ;// 調用浮點數的加法操作int three = add(10,20,30) ;// 調用有三個參數的加法操作System.out.println("add(int x,int y)的計算結果:" + one) ;System.out.println("add(float x,float y)的計算結果:" + two) ;System.out.println("add(int x,int y,int z)的計算結果:" + three) ;}// 定義方法,完成兩個數位相加操作,方法返回一個int型資料public static int add(int x,int y){int temp = 0 ;// 方法中的參數,是局部變數temp = x + y ;// 執行加法計算return temp ;// 返回計算結果}public static int add(int x,int y,int z){int temp = 0 ;// 方法中的參數,是局部變數temp = x + y + z ;// 執行加法計算return temp ;// 返回計算結果}// 定義方法,完成兩個數位相加操作,方法的傳回值是一個float型資料public static float add(float x,float y){float temp = 0 ;// 方法中的參數,是局部變數temp = x + y ;// 執行加法操作return temp ;// 返回計算結果}};
輸出結果:
add(int x,int y)的計算結果:30
add(float x,float y)的計算結果:60
add(int x,int y,int z)的計算結果:23.6
Java覆寫:
- 子類覆寫父類的方法,在不同的類中
- 重寫方法必須和被重寫方法具有相同方法名稱、參數列表和傳回型別
- 重寫方法不能使用比被重寫方法更嚴格的存取權限
class Person{// 定義父類void print(){// 預設的存取權限System.out.println("Person --> void print()。") ;}};class Student extends Person{// 定義繼承關係public void print(){System.out.println("Student --> void print()。") ;}};public class OverrideDemo{public static void main(String args[]){Student s = new Student() ;s.print() ;}};
輸出結果:
Student --> void print()。
小結:java的三大特性:封裝,繼承,多態.而方法的重載和覆寫正是多態的體現.
JAVA中覆寫與重載有什不同?
(1)方法重載是讓類以統一的方式處理不同類型資料的一種手段。多個同名函數同時存在,具有不同的參數個數/類型。重載Overloading是一個類中多態性的一種表現。
(2)Java的方法重載,就是在類中可以建立多個方法,它們具有相同的名字,但具有不同的參數和不同的定義。調用方法時通過傳遞給它們的不同參數個數和參數類型來決定具體使用哪個方法, 這就是多態性。
(3)重載的時候,方法名要一樣,但是參數類型和個數不一樣,傳回值類型可以相同也可以不相同。無法以返回型別作為重載函數的區分標準。
下面是重載的例子:
package c04.answer;//這是包名
//這是這個程式的第一種編程方法,在main方法中先建立一個Dog類執行個體,然後在Dog類的構造方法中利用this關鍵字調用不同的bark方法。不同的重載方法bark是根據其參數類型的不同而區分的。
//注意:除構造器以外,編譯器禁止在其他任何地方中調用構造器。
package c04.answer;
public class Dog {
Dog()
{
this.bark();
}
void bark()//bark()方法是重載方法
{
System.out.println("no barking!");
this.bark("female", 3.4);
}
void bark(String m,double l)//注意:重載的方法的傳回值都是一樣的,
{
System.out.println("a barking dog!");
this.bark(5, "China");
}
void bark(int a,String n)//不能以傳回值區分重載方法,而只能以“參數類型”和“類名”來區分
{
System.out.println("a howling dog");
}
public static void main(String[] args)
{
Dog dog = new Dog();
//dog.bark();
//dog.bark("male", "yellow");
//dog.bark(5, "China");
然後我們再來談談 重寫(Overriding)
(1) 父類與子類之間的多態性,對父類的函數進行重新定義。如果在子類中定義某方法與其父類有相同的名稱和參數,我們說該方法被重寫 (Overriding)。在Java中,子類可繼承父類中的方法,而不需要重新編寫相同的方法。但有時子類並不想原封不動地繼承父類的方法,而是想作一定的修改,這就需要採用方法的重寫。方法重寫又......餘下全文>>
JAVA 中多態與重載的不同?
多態指一個類裡有多個函數,函數名相同,而參數的形式有多種。
重載指子類從父類繼承後,覆蓋了父類原有的函數。