面向?qū)ο筮M(jìn)階篇6-多態(tài)性

基本概念

可以理解為一個(gè)事物的多種形態(tài)

對(duì)象的多態(tài)性:父類的引用指向子類的對(duì)象(或,子類的對(duì)象賦給父類的引用)。

多態(tài)的使用--虛擬方法調(diào)用

在編譯時(shí),只能調(diào)用父類中聲明的方法;

在運(yùn)行時(shí),實(shí)際執(zhí)行的是子類重寫的父類的方法

即,編譯看左邊,執(zhí)行看右邊

虛擬方法定義:子類定義了與父類同名同參的方法,多態(tài)情況下,此時(shí)父類的方法稱為虛擬方法。父類根據(jù)賦給它的不同子類對(duì)象,動(dòng)態(tài)調(diào)用屬于子類的該方法。

幾點(diǎn)說明

1、父類對(duì)象只能調(diào)用父類有的方法,不能調(diào)用子類特有的方法

2、對(duì)象的多態(tài)性,只適用于方法,不適用于屬性

使用前提

1、必須有類的繼承關(guān)系

2、需要有方法的重寫

代碼舉例:

public class AnimalTest {

????public static void main(String[] args) {

????????AnimalTest test = new AnimalTest();

????????test.fun(new Dog());

????????System.out.println("*********");

????????test.fun(new Cat());

????????System.out.println("*********");

????????Animalanimal=newCat();

????????//animal.play();

????????//不適用于方法

????????Animal animal2 = new Dog();

????????System.out.println(animal2.name);//Animal

????}

????public void fun(Animal animal) {

????????animal.eat();

????????animal.shout();

????}

}

class Animal{

????String name = "Animal";

????public void eat() {

????System.out.println("animals need food");

}

public void shout() {

????System.out.println("animals can shout");

????}

}

class Dog extends Animal{

????String name = "DOGS";

????public void eat() {

????System.out.println("Dogs need eat food for dog");

}

public void shout() {

????System.out.println("Dogs shout like wah wah wah");

????}

}

class Cat extends Animal{

????public void eat() {

????System.out.println("Cats like to eat fish");

}

public void shout() {

????System.out.println("Cats shout like meo meo meo");

}

public void play() {

????System.out.println("Cats like play with butterfly");

????}

}

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容