1. 程式人生 > 其它 >Java基礎-編譯型別和執行型別(多型)

Java基礎-編譯型別和執行型別(多型)

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、程式執行結果是根據執行型別決定。