1. 程式人生 > >java學習-向上轉型和向下轉型

java學習-向上轉型和向下轉型

一,多型

在設計一個方法的時候,通常希望該方法具備一定的通用性。比如實現一個動物叫的方法,每個動物的叫聲是不一樣的,可以在方法中接收一個動物型別的引數,當傳入貓類物件的時候就發出喵的聲音,相對傳入狗的物件就發出汪的聲音。同一個方法這種應為引數不同而導致執行效果不同的現象叫做多型。

二,向上轉型

向上轉型—將子類的物件賦值給父類的引用。

一個引用能夠呼叫那些成員(變數和方法),取決於這個物件的型別

一個引用呼叫的是哪個方法,取決於這個引用指向的物件

public class Animal {
    public void bark(){
        System.out.println("animal bark");
    }
	public void bite(){
        System.out.println("bite");
	}
    public void eat(){
        System.out.println("food");
	}
}

class Dog extends Animal {
    public void bark(){
        System.out.println("wang");
	}
	public void bite(){
        System.out.println("dog bite");
	}
}

class Cat extends Animal {
    public void bark(){
        System.out.println("miao");
    }
}

public class Testbark
{
    public static void main(String[] args) {
        Animal A = new Dog();//向上轉型
        A.bark();
        A.bite();

        A = new Cat();
        A.bark();
        A.bite();
    }
}

輸出為:

wang
dog bite
miao
bite

這就是向上轉型,Animal A = new Dog();將子類物件Dog轉化為父類物件Animal。這個時候A這個引用呼叫的方法是子類方法。

我的理解就是,比如用Animal定義了A這個引用,裡面有這三種方法,Animal A = new Dog()將Dog物件裡面的方法賦值給A這個引用。所以最後使用的就是Dog的方法了。這個時候如果執行A.eat();那麼最後就會執行父類的eat方法。