欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java中的抽象類(lèi)和接口你了解嗎

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

抽象類(lèi)

什么是抽象類(lèi)?

在這里插入圖片描述

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

抽象類(lèi)屬于什么類(lèi)型?

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

抽象類(lèi)怎么定義?

[修飾符列表] abstract class 類(lèi)名{
	類(lèi)體;
}

抽象類(lèi)是干什么的?

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

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

什么是抽象方法?

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

例如:

public abstract void doSome();

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

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

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

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

非抽象類(lèi)繼承抽象類(lèi)

以下面代碼為例:

代碼

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

這樣寫(xiě)有問(wèn)題嗎?有問(wèn)題!

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

在這里插入圖片描述

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

代碼

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

這樣寫(xiě)有問(wèn)題嗎?沒(méi)有問(wèn)題!

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

抽象類(lèi)總結(jié)

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

接口

接口的基礎(chǔ)語(yǔ)法

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

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

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

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

語(yǔ)法如下:

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

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

注意點(diǎn):

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

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

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

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

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

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

如下:

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

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

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

class Animal{
}
interface  Flyable{
     void fly();
}
//當(dāng)繼承和實(shí)現(xiàn)同時(shí)出現(xiàn)時(shí),繼承寫(xiě)前面,實(shí)現(xiàn)寫(xiě)后面
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();
    }
}

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

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

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

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

is a

Cat is a Animal

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

has a

Bird has a Wing

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

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

like a

Cook like a Menu(比較抽象)

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

總結(jié)

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

相關(guān)文章

最新評(píng)論