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

Java中的抽象類和接口你了解嗎

 更新時(shí)間:2022年02月27日 16:49:27   作者:洛語言  
這篇文章主要為大家詳細(xì)介紹了Java中的抽象類和接口,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助

抽象類

什么是抽象類?

在這里插入圖片描述

類和類之間有共同特征,將這些共同特征提取出來進(jìn)一步抽象,就形成了抽象類。由于類是不存在的,所以抽象類無法創(chuàng)建對象。

抽象類屬于什么類型?

抽象類也屬于引用數(shù)據(jù)類型。

抽象類怎么定義?

[修飾符列表] abstract class 類名{
	類體;
}

抽象類是干什么的?

抽象類無法實(shí)例化,無法創(chuàng)建對象,所以抽象類是用來被子類繼承的,抽象類中構(gòu)造方法可以供子類使用。

final與abstract是對立的兩個(gè)關(guān)鍵字,不能聯(lián)合使用。

什么是抽象方法?

抽象方法表示沒有實(shí)現(xiàn)的方法,沒有方法體的方法。

例如:

public abstract void doSome();

特點(diǎn)一:抽象方法沒有方法體,以分號結(jié)尾。

特點(diǎn)二:抽象方法前面的修飾符列表必須有abstract關(guān)鍵字。

特點(diǎn)三:抽象類中可以沒有抽象方法,但抽象方法只能出現(xiàn)在抽象類中和接口中。

易錯(cuò):并不是所有沒有方法體的方法都叫做抽象方法!

非抽象類繼承抽象類

以下面代碼為例:

代碼

//抽象類
public abstract class Animal {
    //抽象方法
    public abstract void move();
}
//非抽象類繼承抽象類
class Bird extends Animal{
}

這樣寫有問題嗎?有問題!

編譯器會(huì)給出以下結(jié)果:

在這里插入圖片描述

抽象方法只能出現(xiàn)在抽象類中,當(dāng)Bird類繼承Animal類之后,會(huì)將抽象方法也繼承過去,所以我們需要在Bird類中通過重寫的方式將抽象方法實(shí)現(xiàn)了。

代碼

//抽象類
public abstract class Animal {
}
//非抽象類繼承抽象類
class Bird extends Animal{
	//向上轉(zhuǎn)型
    Animal a = new Bird();
}

這樣寫有問題嗎?沒有問題!

a的類型是Animal,是抽象的,所以這就是面向抽象編程,降低程序的耦合度,提高程序的擴(kuò)展性。

抽象類總結(jié)

  • 抽象類通過在class前面加abstract來定義。
  • 抽象類是無法實(shí)例化的,無法創(chuàng)建對象的,所以抽象類是用來被子類繼承的。
  • final與abstract是對立的,不能聯(lián)和使用。
  • 抽象類子類可以是抽象類,也可以是非抽象類。
  • 抽象類雖然無法實(shí)例化,但是抽象類有構(gòu)造方法,可以供子類使用。
  • 抽象類中不一定有抽象方法,但是抽象方法只能出現(xiàn)在抽象類和接口中。
  • 抽象方法的定義:public abstract void doSome();
  • 一個(gè)非抽象類繼承抽象類,必須將抽象類中的抽象方法進(jìn)行覆蓋。

接口

接口的基礎(chǔ)語法

  • 接口也是一個(gè)"引用數(shù)據(jù)類型",編譯之后也會(huì)形成一個(gè)class字節(jié)碼文件。
  • 接口是完全抽象的(抽象類是半抽象的)。
  • 接口的語法如下:
    [修飾符列表] interface 接口名{......}//修飾符列表可以不寫
  • 接口支持多繼承,一個(gè)接口可以繼承多個(gè)接口。
  • 接口中只包含兩部分內(nèi)容:常量和抽象方法。
  • 接口中所有元素都是public修飾的,都是公開的。
  • 接口中定義抽象方法時(shí):public abstract修飾符可以省略。
  • 接口中定義常量時(shí):public static final修飾符可以省略。

接口的實(shí)現(xiàn)

類和類之間存在繼承,接口和類之間存在類似的關(guān)系,叫做實(shí)現(xiàn)。

接口實(shí)現(xiàn)的關(guān)鍵字:implements

語法如下:

class A implements B{......}

我們也可以把實(shí)現(xiàn)看成一種特殊的繼承(接口和類之間的關(guān)系),但是要注意關(guān)鍵字的不同。

注意點(diǎn):

一:實(shí)現(xiàn)的關(guān)鍵字與繼承不同,是implements。

二:當(dāng)非抽象類實(shí)現(xiàn)接口時(shí),一定要將接口中的抽象方法重寫。

三:在類中實(shí)現(xiàn)接口中抽象方法時(shí),修飾符列表不能省略。

四:一個(gè)類可以實(shí)現(xiàn)多個(gè)接口,這樣彌補(bǔ)了類和類之間只存在單繼承的缺陷。

接口和多態(tài)聯(lián)合使用

接口是完全抽象的,無法實(shí)例化,但是接口可以通過實(shí)現(xiàn)與多態(tài)聯(lián)合使用。

如下:

//接口
interface A{
    //抽象方法
    int add(int a , int b);
}
//一個(gè)類實(shí)現(xiàn)了接口B
class B implements A{
    //重寫了接口中的抽象方法
    public int add(int a , int b){
        return a+b;
    }
    public static void main(String[] args) {
        //A接口的引用指向了B類的對象
        //面向接口編程
        A a = new B();
    }
}

繼承和實(shí)現(xiàn)同時(shí)出現(xiàn)

extends 和 implements可以同時(shí)出現(xiàn),同時(shí)出現(xiàn)時(shí),要將extends寫在前面,inplements寫在后面。

class Animal{
}
interface  Flyable{
     void fly();
}
//當(dāng)繼承和實(shí)現(xiàn)同時(shí)出現(xiàn)時(shí),繼承寫前面,實(shí)現(xiàn)寫后面
class Bird extends Animal implements Flyable{
    public void fly(){
        System.out.println("Bird學(xué)會(huì)了飛翔!");
    }
    public static void main(String[] args) {
        Flyable b = new Bird();
        b.fly();
    }
}

接口在開發(fā)中的作用

面向接口編程,可以降低程序耦合度,提高程序擴(kuò)展力,符合ocp開發(fā)原則。

任何一個(gè)接口都有調(diào)用者和實(shí)現(xiàn)者,調(diào)用者面向接口調(diào)用,實(shí)現(xiàn)者面向接口編寫實(shí)現(xiàn),接口和多態(tài)一起使用可以將調(diào)用者和實(shí)現(xiàn)者解耦合(切斷二者的關(guān)系)。

類型和類型之間的關(guān)系

is a

Cat is a Animal

凡是能滿足 is a 的表示繼承關(guān)系,可以讓Cat類繼承Animal類。

has a

Bird has a Wing

凡是能滿足 has a 的表示關(guān)聯(lián)關(guān)系。

管理關(guān)系通常以屬性的修飾存在,可以將Wing定義為Bird類中的一個(gè)實(shí)例變量。

like a

Cook like a Menu(比較抽象)

凡是能滿足 like a 的表示實(shí)現(xiàn)關(guān)系,可以用Cook這個(gè)類來實(shí)現(xiàn)Menu這個(gè)接口。

總結(jié)

本篇文章就到這里了,希望能夠給你帶來幫助,也希望您能夠多多關(guān)注腳本之家的更多內(nèi)容!  

相關(guān)文章

  • 新手學(xué)習(xí)Java對Redis簡單操作

    新手學(xué)習(xí)Java對Redis簡單操作

    這篇文章主要介紹了新手學(xué)習(xí)Java對Redis簡單操作,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-04-04
  • hibernate關(guān)于session的關(guān)閉實(shí)例解析

    hibernate關(guān)于session的關(guān)閉實(shí)例解析

    這篇文章主要介紹了hibernate關(guān)于session的關(guān)閉實(shí)例解析,分享了相關(guān)代碼示例,小編覺得還是挺不錯(cuò)的,具有一定借鑒價(jià)值,需要的朋友可以參考下
    2018-02-02
  • Spring Boot自定義Banner實(shí)現(xiàn)代碼

    Spring Boot自定義Banner實(shí)現(xiàn)代碼

    這篇文章主要介紹了Spring Boot自定義Banner實(shí)現(xiàn)代碼,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-01-01
  • SpringBoot配置Actuator組件,實(shí)現(xiàn)系統(tǒng)監(jiān)控

    SpringBoot配置Actuator組件,實(shí)現(xiàn)系統(tǒng)監(jiān)控

    在生產(chǎn)環(huán)境中,需要實(shí)時(shí)或定期監(jiān)控服務(wù)的可用性。Spring Boot的actuator(健康監(jiān)控)功能提供了很多監(jiān)控所需的接口,可以對應(yīng)用系統(tǒng)進(jìn)行配置查看、相關(guān)功能統(tǒng)計(jì)等。
    2021-06-06
  • Java中枚舉的實(shí)現(xiàn)與應(yīng)用詳解

    Java中枚舉的實(shí)現(xiàn)與應(yīng)用詳解

    這篇文章主要介紹了Java中枚舉的實(shí)現(xiàn)與應(yīng)用詳解,EnumTest中還有一個(gè)VALUES數(shù)組,里面存儲著所有的枚舉實(shí)例,調(diào)用values方法時(shí)返回VALUES數(shù)組的clone,需要的朋友可以參考下
    2023-12-12
  • spring data jpa 創(chuàng)建方法名進(jìn)行簡單查詢方式

    spring data jpa 創(chuàng)建方法名進(jìn)行簡單查詢方式

    這篇文章主要介紹了spring data jpa 創(chuàng)建方法名進(jìn)行簡單查詢方式,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-02-02
  • Spring框架之IOC介紹講解

    Spring框架之IOC介紹講解

    IOC-Inversion of Control,即控制反轉(zhuǎn)。它不是什么技術(shù),而是一種設(shè)計(jì)思想。這篇文章將為大家介紹一下Spring控制反轉(zhuǎn)IOC的原理,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-08-08
  • SpringBoot使用SOFA-Lookout監(jiān)控的方法

    SpringBoot使用SOFA-Lookout監(jiān)控的方法

    本文介紹SpringBoot使用螞蟻金服SOFA-Lookout配合Prometheus進(jìn)行監(jiān)控,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2019-03-03
  • 如何使用 IntelliJ IDEA 編寫 Spark 應(yīng)用程序(Scala + Maven)

    如何使用 IntelliJ IDEA 編寫 Spark 應(yīng)用程序(Sc

    本教程展示了如何在IntelliJIDEA中使用Maven編寫和運(yùn)行一個(gè)簡單的Spark應(yīng)用程序(例如WordCount程序),本文通過實(shí)例代碼給大家介紹的非常詳細(xì),感興趣的朋友跟隨小編一起看看吧
    2024-11-11
  • SpringBoot MongoDB詳細(xì)使用教程

    SpringBoot MongoDB詳細(xì)使用教程

    這篇文章主要介紹了SpringBoot整合Mongodb實(shí)現(xiàn)簡單的增刪查改,MongoDB是一個(gè)以分布式數(shù)據(jù)庫為核心的數(shù)據(jù)庫,因此高可用性、橫向擴(kuò)展和地理分布是內(nèi)置的,并且易于使用。況且,MongoDB是免費(fèi)的,開源的,感興趣的朋友跟隨小編一起看看吧
    2022-10-10

最新評論

南安市| 柳河县| 文水县| 八宿县| 白朗县| 墨江| 岢岚县| 奉贤区| 高尔夫| 长寿区| 建平县| 永顺县| 葫芦岛市| 临夏市| 涪陵区| 舒兰市| 丰县| 东明县| 贵定县| 容城县| 大足县| 昌邑市| 凤冈县| 新丰县| 平安县| 兰西县| 大姚县| 繁峙县| 长武县| 阜阳市| 准格尔旗| 商河县| 天门市| 射洪县| 龙岩市| 宁安市| 七台河市| 安平县| 彝良县| 彭水| 锦屏县|