Java基礎-編譯型別和執行型別(多型)
阿新 • • 發佈:2022-05-06
package com.hspedu.testpoly_; import org.junit.Test; public class TestPoly_ { /** * 1、編譯型別和執行型別: * 例如:Animal dog = new Dog("小白"); * Animal是編譯型別(=的左邊),Dog是執行型別(=的右邊) * * 2、編譯型別確定即不能再改變,執行型別可以修改 * 例如:Animal white = new Dog("小白狗"); * white = new Cat("小白貓"); * * 3、程式的執行結果是根據執行型別決定的,但是編譯型別決定可以呼叫的方法有哪些 * 例如:Animal white = new Dog("小白狗"); * white物件可以呼叫的方法有:eat方法(Animal類裡的所有方法),不能呼叫Dog類裡的run方法 * white物件呼叫的eat方法的執行結果,是Dog類的eat方法執行結果*/ @Test public void testPolymorphism() { Animal white = new Dog("小白狗"); white.eat(); // white.run(); // 錯誤:沒有run方法 white = new Cat("小白貓"); white.eat(); // cat.jump(); // 錯誤:沒有jump方法 } } class Animal { String name; public Animal(String name) {this.name = name; } public void eat() { System.out.println("覓食..."); } } class Dog extends Animal { String name; public Dog(String name) { super(name); this.name = name; } @Override public void eat() { System.out.println(name + "在啃骨頭.."); }public void run() { System.out.println("dog run..."); } } class Cat extends Animal { String name; public Cat(String name) { super(name); this.name = name; } @Override public void eat() { System.out.println(name + "在吃魚.."); } public void jump() { System.out.println("cat jump..."); } }
1、多型是兩個類存在繼承關係;
2、多型向上轉型:父類的引用指向子類的物件;語法:父類 xxx = new 子類();
1、可以呼叫父類中的所有方法,前提是有訪問許可權,不能呼叫子類的獨有方法;
程式在編譯階段,已經決定這個物件可以呼叫的屬性、方法
2、程式執行結果是根據執行型別決定。