介紹
代碼
父類
package b;public class father_ {//father classString name="動物";int age=10;public void sleep() {System.out.println("睡");}public void run() {System.out.println("跑");}public void eat() {System.out.println("吃");}public void show() {System.out.println("你好");}
}
子類
package b;public class graduate extends father_ {public void eat() {System.out.println("貓吃魚");}public void catchmouse() {System.out.println("貓抓老鼠");}}
主類
package b;public class main_ {public static void main(String[] args) {//向上轉型,父類的引用轉向了子類的father_ animal=new graduate();Object obj=new graduate();System.out.println(animal.catch);System.out.println(obj.name);}}
向上轉型就是我們前面講的編譯類是主類,運行類是子類,能調用的方法必須是子類和父類都有的,如果子類沒有就按照查找原則找父類。并且不能調用子類特有的特有成員。因為對于我們
animal 的編譯是father_,根本不知道catch是哪個
在編譯階段能夠調用哪些成員是由編譯類型決定的,你無法找到運行對象時的方法,
javac是看編譯類型,即父類的。java看運行類型,即子類的。所以就有了運行時候的查找規則