一。向上轉型spa
向上轉型是JAVA中的一種調用方式,是多態的一種表現。向上轉型並不是是將B自動向上轉型爲A的對象,相反它是從另外一種角度去理解向上兩字的:它是對A的對象的方法的擴充,即A的對象可訪問B從A中繼承來的和B重寫A的方法,其它的方法都不能訪問,包括A中的私有成員方法。code
class Father{ public void sleep(){ System.out.println("Father sleep"); } public void eat() { System.out.println("Father eat"); } } class Son extends Father { public void eat() { System.out.println("son eat");//重寫父類方法 } //子類定義了本身的新方法 public void newMethods() { System.out.println("son method"); } } public class Demo { public static void main(String[] args) { Father a = new Son(); a.sleep(); a.eat(); //a.methods(); /*報錯:The method methods() is undefined for the type Father*/ } }
一、a實際上指向的是一個子類對象,因此能夠訪問Son類從Father類繼承的方法sleep()和重寫的方法eat()對象
二、因爲向上轉型,a對象會遺失和父類不一樣的方法,如methods();blog
簡記:A a = New B()是new的子類對象,父類的引用指向它。兒子本身掙的東西,父親不能訪問。父親給兒子留下的(extends)或者兒子重寫父親的東西,父親才能訪問繼承
答案:io
Father sleepfunction
son eatclass
二。靜態方法不能算方法的重寫擴展
class Father { public int num = 100; public void show() { System.out.println("show Father"); } public static void function() { System.out.println("function Father"); } } class Son extends Father { public int num = 1000; public int num2 = 200; public void show() { System.out.println("show Son"); } public void method() { System.out.println("method Son"); } public static void function() { System.out.println("function Son"); } } public class DuoTaiDemo { public static void main(String[] args) { // 要有父類引用指向子類對象。 // 父 f = new 子(); Father f = new Son(); System.out.println(f.num); // 找不到符號 // System.out.println(f.num2); f.show(); // 找不到符號 // f.method(); f.function(); } }
答案:引用
100
show Son
function Father
向上轉型的目的是規範和擴展,提升代碼的維護性和擴展性