publicstaticvoidmain(String[] args){//父類引用指向子類對象//成員變量是從一個類的角度去描述一個對象Animal a =newCat();Cat a1 =newCat();//編譯看左邊,運行看左邊System.out.println(a.color);//動物類的color屬性System.out.println(a.age);//30a.show1();//147}classAnimal{String color ="動物類的color屬性";int age =30;publicvoidshow1(){System.out.println("123");}}classCatextendsAnimal{String color ="橘色的貓";int age =3;publicvoidshow1(){System.out.println("147");}}
## 多態(tài)中靜態(tài)方法的訪問特點
1、編譯看左邊,運行看左邊
2、靜態(tài)的最終解釋:
(1)靜態(tài)變量:存儲在類的字節(jié)碼文件中,被所有對象共享,不隨著對象的變化而變化,所有的對象都具有相同的靜態(tài)變量,所以稱之為靜態(tài)變量
(2)靜態(tài)方法:只會根據(jù)引用所屬的父類類型,來決定要運行的內(nèi)容,和對象沒有任何關(guān)系,不會隨著對象的變化而變化,所以稱之為靜態(tài)方法
(3)多態(tài)討論的是對象的情況,靜態(tài)與對象無關(guān),所以靜態(tài)的成員只根據(jù)類來討論,不用考慮多態(tài)性,靜態(tài)也不具備多態(tài)性## 向下轉(zhuǎn)型
1、如果子類對象想要執(zhí)行自己所屬類型特有的方法,就要從父類引用指向子類對象編程本類引用指向本類對象
2、格式:(目標類型)要轉(zhuǎn)換的對象:IronMan im =(IronMan)m;3、本質(zhì):恢復(fù)了子類對象原本具有的訪問范圍
## 向上轉(zhuǎn)型
1、原本使用子類對象引用指向子類的對象,變化成了父類引用指向子類對象。本質(zhì):縮小了訪問范圍,減少了訪問權(quán)限```java
publicstaticvoidmain(String[] args){Man m =newIronMan();System.out.println(m.name);//托尼史塔克m.dealBusiness();//談幾個億的大生意//向下轉(zhuǎn)型IronMan im =(IronMan)m;im.fly();//飛im.dealBusiness();//談幾個億的大生意//向上轉(zhuǎn)型IronMan im1 =newIronMan();Man m2 = im1;m2.dealBusiness();//談幾個億的大生意System.out.println(m2.name);//托尼史塔克}classMan{
String name ="托尼史塔克";publicvoiddealBusiness(){System.out.println("談生意");}}classIronManextendsMan{
String name ="鋼鐵俠";publicvoiddealBusiness(){System.out.println("談幾個億的大生意");}publicvoidfly(){System.out.println("飛");}}
publicstaticvoidmain(String[] args){JuiceMachine jm =newJuiceMachine();Apple a =newApple();Pear p =newPear();Melon m =newMelon();Fruit f =newMelon();a.flow();//流出蘋果汁p.flow();//流出冰糖雪梨汁m.flow();//流出西瓜汁f.flow();//流出西瓜汁}classJuiceMachine{publicvoidmakeJuice(Fruit f){//Fruit f = new Apple();f.flow();}publicvoidmakeJuice(Apple a){a.flow();}publicvoidmakeJuice(Pear p){p.flow();}publicvoidmakeJuice(Melon m){m.flow();}}classFruit{publicvoidflow(){System.out.println("流出水果汁");}}classAppleextendsFruit{publicvoidflow(){System.out.println("流出蘋果汁");}}classPearextendsFruit{publicvoidflow(){System.out.println("流出冰糖雪梨汁");}}classMelonextendsFruit{publicvoidflow(){System.out.println("流出西瓜汁");}}classMangoextendsFruit{@Overridepublicvoidflow(){System.out.println("流出芒果汁");}}
instanceof關(guān)鍵字
1、格式:A instanceof B 2、關(guān)鍵字,是一個運算符,【A是一個對象,B是一個類型。用于判斷A對象是否和B類型有關(guān),如果A對象和B類型有關(guān)就返回true,否則返回false】
publicclassDuixiang{publicstaticvoidmain(String[] args){Animal a =newDog();a.call();}}abstractclassAnimal{publicabstractvoidcall();//抽象方法}classCatextendsAnimal{@Overridepublicvoidcall(){System.out.println("喵喵喵");}}classDogextendsAnimal{@Overridepublicvoidcall(){System.out.println("汪汪汪");}}
抽象類特點
1、抽象類和抽象方法都必須用abstract
抽象類:abstract class 類名{ } 抽象方法:public abstract void 方法名(列表);