java中的多態(tài)

多態(tài)對象的多中形態(tài)

1.引用的多態(tài)

1.父類的引用可以指向本類的對象
2.父類的引用可以指向子類的對象

2.方法的多態(tài)

1.創(chuàng)建本類對象時,調(diào)用的方法為本類的方法。
2.創(chuàng)建子類對象時,調(diào)用的方法為子類重寫的方法或繼承的方法

父類
package com.imooc;

public class Animal {
    public int age=10;
    public String name;
    public void eat(){
        System.out.println("動物具有吃的能力");
    }
}
子類
package com.imooc;

public class Dog extends Animal {
        public int age=20;
        public void eat(){
            System.out.println("狗愛吃骨頭");
        }
        public void method(){
            System.out.println(age);
            System.out.println(super.age);
            
        }
}
主方法
package com.imooc;

public class Initial {

    public static void main(String[] args) {
        
        
        Animal obj1=new Animal(); //父類的引用可以指向本類的對象
        Animal obj2= new Dog(); //父類的引用可以指向子類的對象
        obj1.eat(); //調(diào)用本類中的方法
        obj2.eat(); //調(diào)用的方法為子類重寫的方法或繼承的方法
        obj2.method();//不能調(diào)用子類中獨有的方法 ,錯誤寫法
    }

}
3.多態(tài)中引用類型的轉(zhuǎn)換

1.向上類型的轉(zhuǎn)換,是小類型向大類型轉(zhuǎn)換
2.向下類型的轉(zhuǎn)換,是大類型向小類型轉(zhuǎn)換存在一定的風(fēng)險。

通常會用instanceof關(guān)鍵字來判斷是否包含某種類型,返回一個boolean值

package com.imooc;

public class Initial {

    public static void main(String[] args) {
        
        Dog dog=new Dog();
        Animal animal=dog;//向上類型的轉(zhuǎn)換
        Dog dog2=(Dog)animal;//向下類型轉(zhuǎn)換,強制轉(zhuǎn)換
        if(animal instanceof Cat){
            Cat cat=(Cat)animal;
        }else{
            System.out.println("無法進行類型轉(zhuǎn)換");
        }
        
    }

}
4.抽象類

抽象類前使用abstract關(guān)鍵字修飾的類,為抽象類
抽象類的作用:限制規(guī)定子類必須實現(xiàn)某些方法,但不必關(guān)注細節(jié)

1.應(yīng)用場景
1.在某些情況下,某個父類只知道其子類應(yīng)該包含怎樣的方法,但無法準(zhǔn)確知道這些子類如何實現(xiàn)這些方法。
2.從多個具有相同特征的類中抽象出一個抽象類,以這個抽象類作為子類一個模板,從而避免了設(shè)計子類的隨便性
3.使用規(guī)則
a.abstract定義抽象類
b.abstract定義抽象的方法,只有聲明,不需要實現(xiàn)。
c.包含抽象方法的類是抽象類。
d.抽象類中可以包含普通的方法,也可以包含抽象方法
e.抽象類不可以直接創(chuàng)建,可以定義引用變量。

5.接口

接口可以理解為一種特殊的類,由全局常量和公共抽象方法組成。
類是一種具體的實現(xiàn)體,而接口定義了某一批類所需要遵守的規(guī)范,接口不關(guān)心這些類的內(nèi)部數(shù)據(jù),也不關(guān)心這些類里方法實現(xiàn)細節(jié),它只規(guī)定這些類里必須提供某些方法

1.接口的定義
和類的定義不同,接口的定義不在使用class關(guān)鍵字,而是使用interface關(guān)鍵字。
2.接口的基本語法

image.png

注意:接口一般是用來被繼承和被實現(xiàn)的,修飾符一般用public,接口中的1.屬性是常量,即使定義時不添加 public static final ,系統(tǒng)也會自動加上。
2.接口中的方法只能是抽象方法,在使用時即使不添加public abstract ,系統(tǒng)也會自動加上。
3.接口也是抽象的在修飾符后面需要加上abstract,如果不加系統(tǒng)會給我們自動加上。

3.使用接口
一個類可以實現(xiàn)一個或多個接口,實現(xiàn)一個接口用implements關(guān)鍵字,java中一個類只能繼承一個父類,不夠靈活,通過多個接口可以做補充。

image.png
4.抽象類圖形分析
image.png

可以定義一個Telphone抽象類,用CellPhone和Smartphone繼承抽象類。

抽象類
package com.xhouxiang;

public abstract class TelePhone {
    public abstract void message();
    public abstract void tell();
}
CellPhone繼承
package com.xhouxiang;

public class CellPhone extends TelePhone {

    @Override
    public void message() {
        // TODO Auto-generated method stub
        System.out.println("通過鍵盤發(fā)短信");
    }

    @Override
    public void tell() {
        // TODO Auto-generated method stub
        System.out.println("通過鍵盤打電話");
    }

}
SmartPhone繼承
package com.xhouxiang;

public class SmartPhone extends TelePhone {

    @Override
    public void message() {
        // TODO Auto-generated method stub
        System.out.println("通過語音發(fā)短信");
    }

    @Override
    public void tell() {
        // TODO Auto-generated method stub
        System.out.println("通過語音打電話");
    }

}
主函數(shù)
package com.xhouxiang;

public class initialmian {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        CellPhone obj1=new CellPhone();
        SmartPhone obj2=new SmartPhone();
        obj1.message();
        obj1.tell();
        obj2.message();
        obj2.tell();
    }

}
5.接口圖形化分析
image.png

智能手機也可以玩游戲,Psp也可以玩游戲,PsP不能繼承TelPhone這個類,只有寫一個接口讓他們各自實現(xiàn)。

接口
package com.xhouxiang;

public interface InterPlaygame {
    public void playgame();
}
智能手機玩游戲
package com.xhouxiang;

public class SmartPhone extends TelePhone implements InterPlaygame {

    @Override
    public void message() {
        // TODO Auto-generated method stub
        System.out.println("通過語音發(fā)短信");
    }

    @Override
    public void tell() {
        // TODO Auto-generated method stub
        System.out.println("通過語音打電話");
    }

    @Override
    public void playgame() {
        // TODO Auto-generated method stub
        System.out.println("智能手機打游戲");
    }

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

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

  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語法,類相關(guān)的語法,內(nèi)部類的語法,繼承相關(guān)的語法,異常的語法,線程的語...
    子非魚_t_閱讀 34,671評論 18 399
  • 本文出自 Eddy Wiki ,轉(zhuǎn)載請注明出處:http://eddy.wiki/interview-java.h...
    eddy_wiki閱讀 1,272評論 0 5
  • (一)Java部分 1、列舉出JAVA中6個比較常用的包【天威誠信面試題】 【參考答案】 java.lang;ja...
    獨云閱讀 7,256評論 0 62
  • 面向?qū)ο笾饕槍γ嫦蜻^程。 面向過程的基本單元是函數(shù)。 什么是對象:EVERYTHING IS OBJECT(萬物...
    sinpi閱讀 1,220評論 0 4
  • 1.import static是Java 5增加的功能,就是將Import類中的靜態(tài)方法,可以作為本類的靜態(tài)方法來...
    XLsn0w閱讀 1,424評論 0 2

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