1. 程式人生 > 其它 >Java面對物件的三大特徵及理解其一:多型

Java面對物件的三大特徵及理解其一:多型

@

目錄

多型的概念:

多型性就是允許將父物件設定成為一個或更多與自身子物件相等的技術,賦值之後父物件就可以根據當前賦值給自身子物件的特性以不同的方式運作,java中多型性可以把不同的子類物件都當作父類來看,從而遮蔽不同子類物件之間的差異,寫出通用的程式碼,做出通用的程式設計,以適應需求的不斷變化。

多型的實現前提:

  • 繼承的存在(沒有繼承就沒有多型)
  • 子類重寫父類的方法 (多型向下會呼叫子類重寫後的方法)
  • 父類引用變數指向子類物件。(涉及子類到父類的型別轉換)

多型的優勢:

  • 消除型別之間的耦合關係
  • 可替換性
  • 可擴充性

多型的使用:

向上轉型:

Animal dog = new Dog();

將一個父類的引用指向一個子類物件,成為向上轉型,自動進行型別轉換。此時通過父類引用變數呼叫的方法是子類覆蓋或繼承父類的方法,而不是父類的方法此時通過父類引用變數無法呼叫子類特有的方法。

向下轉型:

Dog dog1 = (Dog) dog;

將一個指向子類物件的引用賦給一個子類的引用,成為向下轉型,此時必須進行強制型別轉換。向下轉型必須轉換為父類引用指向的真實子類類否則出現,"Incompatible types. Found: 'Cat', required: 'Dog'"

程式碼演示:

介面:

public interface Animal {
void eat();

void sleep();
}

貓類實現Animal介面:

public class Cat implements Animal{
@Override
public void eat() {
    System.out.println("加菲貓在吃披薩");
}

@Override
public void sleep() {
    System.out.println("加菲貓在睡午覺");
}
}

狗類實現介面:

public class Dog implements Animal {
@Override
public void eat() {
    System.out.println("閃電狗在吃骨頭");
}

@Override
public void sleep() {
    System.out.println("閃電狗在睡覺覺");
}
}

測試類:

public class Animal_Test {
public static void main(String[] args) {
    Animal dog = new Dog();
    dog.eat();
    dog.sleep();
    Dog dog1 = (Dog) dog;
    dog1.eat();

    Animal cat = new Cat();
    cat.eat();
    cat.sleep();
}
}

執行結果:

閃電狗在吃骨頭
閃電狗在睡覺覺
閃電狗在吃骨頭
加菲貓在吃披薩
加菲貓在睡午覺

多型的理解和程式碼運用已為你雙手呈上,前面還有面對物件三大特徵的繼承,封裝,希望能幫助你更深入的理解面對物件!