91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

如何理解java 多態與抽象類

發布時間:2021-11-08 12:46:01 來源:億速云 閱讀:163 作者:柒染 欄目:開發技術

今天就跟大家聊聊有關如何理解java 多態與抽象類,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結了以下內容,希望大家根據這篇文章可以有所收獲。

前言

今天是2021LOL全球總決賽,一直不被大家看好的EDG沖到了決賽對戰韓國隊的DK,可以說EDG面對如此強大的對手,想贏是比較難的,為了給中國隊打氣我立下flag,如果EDG獲勝那我就獎勵自己學習到第二天6點,結果我就來了,,,恭喜EDG!

如何理解java 多態與抽象類

為了接下來接口的學習,我們先來學習多態與抽類相關的一些知識,有助于我們更好的學習接口這一重點

多態

初識多態

多態(Polymorphism)按字面的意思就是“多種狀態”,是面向對象的程序設計語言最核心的特征。從一定角度來看,封裝和繼承幾乎都是為多態而準備的。

什么是多態?

多態是同一個行為具有多個不同表現形式或形態的能力。多態就是同一個接口,使用不同的實例而執行不同操作,舉個例子

彩色打印機和黑白打印機都是打印機,但是你用彩色打印機就可以打印出彩色的文件,用黑白打印機就可以打印出黑白的文件,使用不同的實例來執行不同的操作。

多態的分類

編譯時多態(設計時多態):方法的重載
運行時多態:JAVA運行時系統根據調用該方法的實例的類型來決定選擇調用哪個方法則被稱為運行時多態。這個也是我們平時所說的多態

一個引用變量倒底會指向哪個類的實例對象,該引用變量發出的方法
調用到底是哪個類中實現的方法,必須在由程序運行期間才能決定

多態的必要條件

繼承
父類引用指向子類對象:Parent p = new Child();
重寫

先來解釋一下第三個:
方法的重寫和重載是java多態性的不同表現,重寫是父類與子類之間多態性的一種表現,重載可以理解成多態的具體表現形式。

實現多態

想要實現多態,那我們就先得了解向上轉型與向下轉型

向上轉型

向上類型轉換(Upcast):將子類型轉換為父類型。 隱式/自動類型轉換,是小類型到大類型的轉換
對于向上的類型轉換,不需要顯示指定,即不需要加上前面的小括號和父 類類型名

例如:

Parent p = new Child();

就是非常典型的一種,前提是Parent是Child的父類,也就是父類引用指向子類實例化。這是自動進行的,是隱式的進行的。

向下轉型

向下類型轉換(Downcast):將父類型轉換為子類型。 將一個指向子類對象的父類引用賦值給一個子類的引用
強制類型轉換,是大類型到小類型 –
父類型的引用必須指向轉型的子類的對象,即指向誰才能轉換成誰。不然也會編譯出錯

例如:

Parent p = new Child(); 
Child c = (Child)p;

大家應該也注意到了,發生向下轉型前發生了向下轉型,這也是向下轉型發生的前提,也就是將一個指向子類對象的父類引用賦值給一個子類的引用。

既然這樣那么問題來了,我們怎么知道這個父類的引用是否指向了這個子類類型的對象呢?父類的子類一多,豈不是非常容易出錯呢?

這個大家其實不需要太擔心,因為我們有一個運算符instanceof

instanceof運算符

instanceof運算符用于:判斷該運算符前面引用類型變量指向的對象是否是后面類,或者其子類、接口實現類創建的對象。如果是則返回true,否則返回false,

其使用格式如下: 引用類型變量 instanceof (類、抽象類或接口)

例如:

p instanceof Child;//true

instanceof運算符用于強制類型轉換之前檢查對象的真實類型以避免類型轉換異常,從而提高代碼健壯性。

具體實現

父類引用指向子類實例時,可以調用子類重寫父類的方法以及直接繼承父類的方法,無法調用子類特有的方法。
如果要調用子類的特有方法就得進行向下轉型變成子類引用才可以。
靜態static方法屬于特殊情況,靜態方法只能繼承,不能重寫。調用的時候用誰的引用,則調用誰的版本。

當使用多態方式調用方法時,首先檢查父類中是否有該方法,如果沒有,則編譯錯誤;如果有,再去調用子類的同名方法。

接下來來個簡單的例子演示一下吧!

class Father {
    int age=35;
    public void high(){
        System.out.println("爸爸身高175cm");
    }
    public void hobby(){
        System.out.println("爸爸喜歡看新聞");
    }
    public static void sta(){
        System.out.println("我是父類的靜態方法");
    }
}
class Son extends Father {
    public void high() {
        System.out.println("兒子今年身高180cm");
    }

    public void hobby() {
        System.out.println("兒子喜歡打英雄聯盟");
    }
    public static void sta(){
        System.out.println("我是子類的靜態方法");
    }
    public void self(){
        System.out.println("我是兒子的方法");
    }
}
public class Text_3 {
    public static void main(String[] args){
        Father f = new Son();
        f.hobby();
        f.high();
        f.sta();
//      f.self();//報錯
        Son s = (Son) f;
        s.hobby();
        s.self();
        s.sta();
    }
}

輸出為:

兒子喜歡打英雄聯盟
兒子今年身高180cm
我是父類的靜態方法
兒子喜歡打英雄聯盟
我是兒子的方法
我是子類的靜態方法

大家注意子類和父類中都有sta()方法,這并不是重寫,它們都是自己類的方法,并無什么關系。

抽象類與抽象方法

為什么要使用抽象?

當父類的某些方法不確定時,可以用abstract關鍵字來修飾該方法,即:抽象方法,用abstract來修飾該類,即:抽象類。

我們都知道,父類是將子類所共同擁有的屬性和方法進行抽取,這些屬性和方法中,有的是已經明確實現了的,有的還無法確定,那么我們就可以將其定義成抽象,在后日子類進行重用,進行具體化。這樣,抽象類也就誕生了。

用abstract修飾的類,即抽象類;用abstract修飾的方法,即抽象方法。

抽象方法

抽象方法不能有方法主體。格式如下:

//動物會叫
public abstract void cry();

抽象類

抽象類是為了把相同的但不確定的東西的提取出來,為了以后的重用。定義成抽象類的目的,就是為了在子類中實現抽象類。其實抽象類就是為了繼承而出現的

abstract定義抽象類 ,抽象類可以沒有抽象方法
抽象類不能直接實例化,只能被繼承,可以通過向上轉型完成對象實例
abstract定義抽象方法,不需要具體實現
包含抽象方法的類是抽象類
當繼承的父類是抽象類時,需要將抽象類中的所有抽象方法全部實現。如果沒有全部實現那么這個子類必須定義為抽象類,否則報錯。
abstract 不能與static、final、private共存
抽象方法在子類實現時訪問權限必須大于等于父類方法

格式如下:

abstract class Animal {
    String name;
    int age;

    // 抽象方法
    public abstract void cry(); 
}

希望大家能夠像EDG一樣證明自己,讓那些看不好你的人,好好瞧瞧
加油,少年!

看完上述內容,你們對如何理解java 多態與抽象類有進一步的了解嗎?如果還想了解更多知識或者相關內容,請關注億速云行業資訊頻道,感謝大家的支持。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

临颍县| 石城县| 开原市| 东阳市| 合阳县| 察隅县| 营山县| 宝清县| 迭部县| 九龙坡区| 昌邑市| 松溪县| 巴里| 三穗县| 濮阳县| 延庆县| 平潭县| 城口县| 平乡县| 长泰县| 和静县| 彭水| 海宁市| 石首市| 城口县| 呈贡县| 淳化县| 枞阳县| 武平县| 蒙城县| 兴安盟| 大港区| 白银市| 吴堡县| 洛扎县| 洱源县| 黄浦区| 宁强县| 镇巴县| 阳新县| 卢龙县|