最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

java 多態(tài)與抽象類(lèi)詳解總結(jié)

 更新時(shí)間:2021年11月08日 11:22:56   作者:_白白不白  
在面向?qū)ο蟮母拍钪校械膶?duì)象都是通過(guò)類(lèi)來(lái)描繪的,但是反過(guò)來(lái),并不是所有的類(lèi)都是用來(lái)描繪對(duì)象的,如果一個(gè)類(lèi)中沒(méi)有包含足夠的信息來(lái)描繪一個(gè)具體的對(duì)象,這樣的類(lèi)就是抽象類(lèi),而多態(tài)是同一個(gè)行為具有多個(gè)不同表現(xiàn)形式或形態(tài)的能力

前言

今天是2021LOL全球總決賽,一直不被大家看好的EDG沖到了決賽對(duì)戰(zhàn)韓國(guó)隊(duì)的DK,可以說(shuō)EDG面對(duì)如此強(qiáng)大的對(duì)手,想贏是比較難的,為了給中國(guó)隊(duì)打氣我立下flag,如果EDG獲勝那我就獎(jiǎng)勵(lì)自己學(xué)習(xí)到第二天6點(diǎn),結(jié)果我就來(lái)了,,,恭喜EDG!

在這里插入圖片描述

為了接下來(lái)接口的學(xué)習(xí),我們先來(lái)學(xué)習(xí)多態(tài)與抽類(lèi)相關(guān)的一些知識(shí),有助于我們更好的學(xué)習(xí)接口這一重點(diǎn)

多態(tài)

初識(shí)多態(tài)

多態(tài)(Polymorphism)按字面的意思就是“多種狀態(tài)”,是面向?qū)ο蟮某绦蛟O(shè)計(jì)語(yǔ)言最核心的特征。從一定角度來(lái)看,封裝和繼承幾乎都是為多態(tài)而準(zhǔn)備的。

什么是多態(tài)?

多態(tài)是同一個(gè)行為具有多個(gè)不同表現(xiàn)形式或形態(tài)的能力。多態(tài)就是同一個(gè)接口,使用不同的實(shí)例而執(zhí)行不同操作,舉個(gè)例子

彩色打印機(jī)和黑白打印機(jī)都是打印機(jī),但是你用彩色打印機(jī)就可以打印出彩色的文件,用黑白打印機(jī)就可以打印出黑白的文件,使用不同的實(shí)例來(lái)執(zhí)行不同的操作。

多態(tài)的分類(lèi)

編譯時(shí)多態(tài)(設(shè)計(jì)時(shí)多態(tài)):方法的重載
運(yùn)行時(shí)多態(tài):JAVA運(yùn)行時(shí)系統(tǒng)根據(jù)調(diào)用該方法的實(shí)例的類(lèi)型來(lái)決定選擇調(diào)用哪個(gè)方法則被稱(chēng)為運(yùn)行時(shí)多態(tài)。這個(gè)也是我們平時(shí)所說(shuō)的多態(tài)

一個(gè)引用變量倒底會(huì)指向哪個(gè)類(lèi)的實(shí)例對(duì)象,該引用變量發(fā)出的方法
調(diào)用到底是哪個(gè)類(lèi)中實(shí)現(xiàn)的方法,必須在由程序運(yùn)行期間才能決定

多態(tài)的必要條件

繼承
父類(lèi)引用指向子類(lèi)對(duì)象:Parent p = new Child();
重寫(xiě)

先來(lái)解釋一下第三個(gè):
方法的重寫(xiě)和重載是java多態(tài)性的不同表現(xiàn),重寫(xiě)是父類(lèi)與子類(lèi)之間多態(tài)性的一種表現(xiàn),重載可以理解成多態(tài)的具體表現(xiàn)形式。

實(shí)現(xiàn)多態(tài)

想要實(shí)現(xiàn)多態(tài),那我們就先得了解向上轉(zhuǎn)型與向下轉(zhuǎn)型

向上轉(zhuǎn)型

向上類(lèi)型轉(zhuǎn)換(Upcast):將子類(lèi)型轉(zhuǎn)換為父類(lèi)型。 隱式/自動(dòng)類(lèi)型轉(zhuǎn)換,是小類(lèi)型到大類(lèi)型的轉(zhuǎn)換
對(duì)于向上的類(lèi)型轉(zhuǎn)換,不需要顯示指定,即不需要加上前面的小括號(hào)和父 類(lèi)類(lèi)型名

例如:

Parent p = new Child(); 

就是非常典型的一種,前提是Parent是Child的父類(lèi),也就是父類(lèi)引用指向子類(lèi)實(shí)例化。這是自動(dòng)進(jìn)行的,是隱式的進(jìn)行的。

向下轉(zhuǎn)型

向下類(lèi)型轉(zhuǎn)換(Downcast):將父類(lèi)型轉(zhuǎn)換為子類(lèi)型。 將一個(gè)指向子類(lèi)對(duì)象的父類(lèi)引用賦值給一個(gè)子類(lèi)的引用
強(qiáng)制類(lèi)型轉(zhuǎn)換,是大類(lèi)型到小類(lèi)型 –
父類(lèi)型的引用必須指向轉(zhuǎn)型的子類(lèi)的對(duì)象,即指向誰(shuí)才能轉(zhuǎn)換成誰(shuí)。不然也會(huì)編譯出錯(cuò)

例如:

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

大家應(yīng)該也注意到了,發(fā)生向下轉(zhuǎn)型前發(fā)生了向下轉(zhuǎn)型,這也是向下轉(zhuǎn)型發(fā)生的前提,也就是將一個(gè)指向子類(lèi)對(duì)象的父類(lèi)引用賦值給一個(gè)子類(lèi)的引用。

既然這樣那么問(wèn)題來(lái)了,我們?cè)趺粗肋@個(gè)父類(lèi)的引用是否指向了這個(gè)子類(lèi)類(lèi)型的對(duì)象呢?父類(lèi)的子類(lèi)一多,豈不是非常容易出錯(cuò)呢?

這個(gè)大家其實(shí)不需要太擔(dān)心,因?yàn)槲覀冇幸粋€(gè)運(yùn)算符instanceof

instanceof運(yùn)算符

instanceof運(yùn)算符用于:判斷該運(yùn)算符前面引用類(lèi)型變量指向的對(duì)象是否是后面類(lèi),或者其子類(lèi)、接口實(shí)現(xiàn)類(lèi)創(chuàng)建的對(duì)象。如果是則返回true,否則返回false,

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

例如:

p instanceof Child;//true

instanceof運(yùn)算符用于強(qiáng)制類(lèi)型轉(zhuǎn)換之前檢查對(duì)象的真實(shí)類(lèi)型以避免類(lèi)型轉(zhuǎn)換異常,從而提高代碼健壯性。

具體實(shí)現(xiàn)

父類(lèi)引用指向子類(lèi)實(shí)例時(shí),可以調(diào)用子類(lèi)重寫(xiě)父類(lèi)的方法以及直接繼承父類(lèi)的方法,無(wú)法調(diào)用子類(lèi)特有的方法。
如果要調(diào)用子類(lèi)的特有方法就得進(jìn)行向下轉(zhuǎn)型變成子類(lèi)引用才可以。
靜態(tài)static方法屬于特殊情況,靜態(tài)方法只能繼承,不能重寫(xiě)。調(diào)用的時(shí)候用誰(shuí)的引用,則調(diào)用誰(shuí)的版本。

當(dāng)使用多態(tài)方式調(diào)用方法時(shí),首先檢查父類(lèi)中是否有該方法,如果沒(méi)有,則編譯錯(cuò)誤;如果有,再去調(diào)用子類(lèi)的同名方法。

接下來(lái)來(lái)個(gè)簡(jiǎn)單的例子演示一下吧!

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("我是父類(lèi)的靜態(tài)方法");
    }
}
class Son extends Father {
    public void high() {
        System.out.println("兒子今年身高180cm");
    }

    public void hobby() {
        System.out.println("兒子喜歡打英雄聯(lián)盟");
    }
    public static void sta(){
        System.out.println("我是子類(lèi)的靜態(tài)方法");
    }
    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();//報(bào)錯(cuò)
        Son s = (Son) f;
        s.hobby();
        s.self();
        s.sta();
    }
}

輸出為:

兒子喜歡打英雄聯(lián)盟
兒子今年身高180cm
我是父類(lèi)的靜態(tài)方法
兒子喜歡打英雄聯(lián)盟
我是兒子的方法
我是子類(lèi)的靜態(tài)方法

大家注意子類(lèi)和父類(lèi)中都有sta()方法,這并不是重寫(xiě),它們都是自己類(lèi)的方法,并無(wú)什么關(guān)系。

抽象類(lèi)與抽象方法

為什么要使用抽象?

當(dāng)父類(lèi)的某些方法不確定時(shí),可以用abstract關(guān)鍵字來(lái)修飾該方法,即:抽象方法,用abstract來(lái)修飾該類(lèi),即:抽象類(lèi)。

我們都知道,父類(lèi)是將子類(lèi)所共同擁有的屬性和方法進(jìn)行抽取,這些屬性和方法中,有的是已經(jīng)明確實(shí)現(xiàn)了的,有的還無(wú)法確定,那么我們就可以將其定義成抽象,在后日子類(lèi)進(jìn)行重用,進(jìn)行具體化。這樣,抽象類(lèi)也就誕生了。

用abstract修飾的類(lèi),即抽象類(lèi);用abstract修飾的方法,即抽象方法。

抽象方法

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

//動(dòng)物會(huì)叫
public abstract void cry(); 

抽象類(lèi)

抽象類(lèi)是為了把相同的但不確定的東西的提取出來(lái),為了以后的重用。定義成抽象類(lèi)的目的,就是為了在子類(lèi)中實(shí)現(xiàn)抽象類(lèi)。其實(shí)抽象類(lèi)就是為了繼承而出現(xiàn)的

abstract定義抽象類(lèi) ,抽象類(lèi)可以沒(méi)有抽象方法
抽象類(lèi)不能直接實(shí)例化,只能被繼承,可以通過(guò)向上轉(zhuǎn)型完成對(duì)象實(shí)例
abstract定義抽象方法,不需要具體實(shí)現(xiàn)
包含抽象方法的類(lèi)是抽象類(lèi)
當(dāng)繼承的父類(lèi)是抽象類(lèi)時(shí),需要將抽象類(lèi)中的所有抽象方法全部實(shí)現(xiàn)。如果沒(méi)有全部實(shí)現(xiàn)那么這個(gè)子類(lèi)必須定義為抽象類(lèi),否則報(bào)錯(cuò)。
abstract 不能與static、final、private共存
抽象方法在子類(lèi)實(shí)現(xiàn)時(shí)訪問(wèn)權(quán)限必須大于等于父類(lèi)方法

格式如下:

abstract class Animal {
    String name;
    int age;

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

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

到此這篇關(guān)于java 多態(tài)與抽象類(lèi)詳解總結(jié)的文章就介紹到這了,更多相關(guān)java 多態(tài)與抽象類(lèi)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • java實(shí)現(xiàn)小球碰撞功能

    java實(shí)現(xiàn)小球碰撞功能

    這篇文章主要為大家詳細(xì)介紹了java實(shí)現(xiàn)小球碰撞功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-01-01
  • mybatis如何根據(jù)表逆向自動(dòng)化生成代碼實(shí)例

    mybatis如何根據(jù)表逆向自動(dòng)化生成代碼實(shí)例

    逆向工程是一個(gè)專(zhuān)門(mén)為 MyBatis 框架使用者設(shè)計(jì)的代碼生成器,可以根據(jù)數(shù)據(jù)庫(kù)中的表字段名,自動(dòng)生成 POJO 類(lèi),mapper 接口與 SQL 映射文件,這篇文章主要給大家介紹了關(guān)于mybatis如何根據(jù)表逆向自動(dòng)化生成代碼的相關(guān)資料,需要的朋友可以參考下
    2021-08-08
  • Java7到Java17之Switch語(yǔ)句進(jìn)化史示例詳解

    Java7到Java17之Switch語(yǔ)句進(jìn)化史示例詳解

    這篇文章主要為大家介紹了Java7到Java17之Switch語(yǔ)句進(jìn)化史示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-01-01
  • 解析spring-boot-starter-parent簡(jiǎn)介

    解析spring-boot-starter-parent簡(jiǎn)介

    本文通過(guò)代碼的形式給大家介紹了spring-boot-starter-parent的基礎(chǔ)知識(shí),需要的朋友可以參考下
    2018-09-09
  • JProfiler11使用教程之JVM調(diào)優(yōu)問(wèn)題小結(jié)

    JProfiler11使用教程之JVM調(diào)優(yōu)問(wèn)題小結(jié)

    這篇文章主要介紹了JProfiler11使用教程之JVM調(diào)優(yōu),本文通過(guò)圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-03-03
  • SpringBoot中事務(wù)失效的原因詳解

    SpringBoot中事務(wù)失效的原因詳解

    這篇文章主要介紹了SpringBoot中事務(wù)失效的原因詳解,spring中的事務(wù)是依賴(lài)AOP的,AOP是通過(guò)動(dòng)態(tài)代理實(shí)現(xiàn)的,只有通過(guò)代理類(lèi)訪問(wèn)的方法才能被攔截,需要的朋友可以參考下
    2023-10-10
  • 總結(jié)Java常用到的六個(gè)加密技術(shù)和代碼

    總結(jié)Java常用到的六個(gè)加密技術(shù)和代碼

    大家要記住現(xiàn)代密碼學(xué)最重要的原則柯克霍夫原則:數(shù)據(jù)的安全基于密鑰而不是算法的保密。也就是說(shuō)即使密碼系統(tǒng)的任何細(xì)節(jié)已為人悉知,只要密匙未洩漏,它也應(yīng)是安全的。這篇文章給大家介紹了6個(gè)常用的加密技術(shù)和代碼。
    2016-07-07
  • springboot整合freemarker詳解

    springboot整合freemarker詳解

    本篇文章主要介紹了springboot整合freemarker詳解,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-05-05
  • Java限流實(shí)現(xiàn)的幾種方法詳解

    Java限流實(shí)現(xiàn)的幾種方法詳解

    這篇文章主要介紹了Java限流實(shí)現(xiàn)的幾種方法,通俗的說(shuō),限流就是 限制一段時(shí)間內(nèi),用戶訪問(wèn)資源的次數(shù),減輕服務(wù)器壓力,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2022-12-12
  • 全解史上最快的JOSN解析庫(kù)alibaba Fastjson

    全解史上最快的JOSN解析庫(kù)alibaba Fastjson

    這篇文章主要介紹了史上最快的JOSN解析庫(kù)alibaba Fastjson,對(duì)FastJson感興趣的同學(xué),一定要看一下
    2021-04-04

最新評(píng)論

台湾省| 韶山市| 孟连| 英山县| 兴业县| 苍南县| 白城市| 呈贡县| 尚义县| 新沂市| 同德县| 和静县| 南宁市| 中牟县| 龙陵县| 兴海县| 花莲县| 河曲县| 苏尼特右旗| 辽阳市| 六安市| 乐陵市| 阳新县| 上虞市| 灌云县| 东港市| 文水县| 新营市| 荔波县| 隆尧县| 平凉市| 普宁市| 蚌埠市| 车致| 古浪县| 广南县| 潼南县| 天台县| 教育| 乌拉特中旗| 天等县|