Java:多型性
阿新 • • 發佈:2021-01-20
Java是屬於面向物件程式設計的語言,面向物件的三大特徵,封裝,繼承,多型。其中,多型性是建立在繼承關係上的。
多型用一句話概括就是:父類引用指向子類物件。
實現多型的幾種方式:
現在有兩個類,Animal類和Cat類,其中Cat繼承Animal。
1、直接用父型別變數接收子類物件
Animal ac = new Cat();
2、引數多型
方法引數型別是父型別,但傳入子類物件,構成多型
Cat c1 = new Cat();
m1(c1);
public static void m1(Animal a){}
3、返回值多型
用父型別變數接收返回的子類物件,形成多型。
Animal a2 = m2();
public static Animal m2(){
return new Cat();//返回貓型別
}
多型之屬性呼叫 :
我們先建立兩個類,Fu和Zi,其中Zi繼承Fu。
父類有兩個成員變數和一個成員方法。
public class Fu {
int fu = 1;
int a = 5;
void m(){
System.out.println("父類方法");
}
}
子類中建立兩個變數和兩個方法
注意:a 變數和 m()方法父類也有。
public class Zi extends Fu{
int zi = 9;
int a = 7;
void m(){
System.out.println("子類方法");
}
void unique(){
System.out.println("子類特有");
}
}
用父型別變數接收子類物件,進行測試:
public class Test {
public static void main(String[] args) {
Fu fu = new Zi();
System.out.println(fu.a);
fu.m();
//fu.unique();
}
}
結果:
發現,m()是子類和父類都有的,子類重寫了父類的方法。父類引用呼叫了子類的這個方法,因為unique()方法是子類特有方法,父類沒有,不能呼叫。a 變數呼叫的也是父類中的。
給出總結:
- 1 如果呼叫的是父類沒有的,直接報錯,都訪問不了
- 2 如果呼叫的是子類沒有的,都訪問父類的
- 3 如果呼叫的是父類和子類都有的,除了成員方法呼叫子類,其他的都呼叫父類,因為成員方法可以覆寫