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");}}
## 多態中靜態方法的訪問特點
1、編譯看左邊,運行看左邊
2、靜態的最終解釋:
(1)靜態變量:存儲在類的字節碼文件中,被所有對象共享,不隨著對象的變化而變化,所有的對象都具有相同的靜態變量,所以稱之為靜態變量
(2)靜態方法:只會根據引用所屬的父類類型,來決定要運行的內容,和對象沒有任何關系,不會隨著對象的變化而變化,所以稱之為靜態方法
(3)多態討論的是對象的情況,靜態與對象無關,所以靜態的成員只根據類來討論,不用考慮多態性,靜態也不具備多態性## 向下轉型
1、如果子類對象想要執行自己所屬類型特有的方法,就要從父類引用指向子類對象編程本類引用指向本類對象
2、格式:(目標類型)要轉換的對象:IronMan im =(IronMan)m;3、本質:恢復了子類對象原本具有的訪問范圍
## 向上轉型
1、原本使用子類對象引用指向子類的對象,變化成了父類引用指向子類對象。本質:縮小了訪問范圍,減少了訪問權限```java
publicstaticvoidmain(String[] args){Man m =newIronMan();System.out.println(m.name);//托尼史塔克m.dealBusiness();//談幾個億的大生意//向下轉型IronMan im =(IronMan)m;im.fly();//飛im.dealBusiness();//談幾個億的大生意//向上轉型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關鍵字
1、格式:A instanceof B 2、關鍵字,是一個運算符,【A是一個對象,B是一個類型。用于判斷A對象是否和B類型有關,如果A對象和B類型有關就返回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 方法名(列表);