抽象類,接口

抽象類

  • 強(qiáng)制子類重寫其定義的抽象方法。
  • 抽象類中可以不定義抽象方法,這樣做僅僅是不讓該類建立對(duì)象。
抽象類的注意事項(xiàng)
  • 抽象類和抽象方法都必須用abstract修飾,抽象方法必須存放在抽象類中。

  • abstract不能與private,static,final共用修飾函數(shù)。

  • 抽象方法不存在方法體,通過(guò) new 對(duì)象調(diào)用方法,沒(méi)意義。

  • 抽象類中的方法要被調(diào)用,必須由子類重寫其所有的抽象方法后,建立子類對(duì)象調(diào)用,如果子類只重寫了部分抽象方法,那么該子類還是一個(gè)抽象類。

  • 抽象類只是比一般類多了抽象方法,不存在抽象屬性

public static void main(String[] args) {
        new DemoImpl().getCount();
}

//抽象類
abstract class IDemo{

    public String mStr = "DemoString";

    //抽象方法,將不確定的部分交給實(shí)現(xiàn)類去實(shí)現(xiàn)
    abstract int addCount();

    public void getCount(){
        System.out.println(addCount());
    }
}

//實(shí)現(xiàn)類
class DemoImpl extends IDemo{

    @Override
    int addCount() {
        return 1;
    }
}

接口

接口的注意事項(xiàng)
  • 接口是一個(gè)特殊的抽象類,不能創(chuàng)建對(duì)象,原因和抽象類相同。

  • 接口沒(méi)有構(gòu)造方法,成員變量都是常量,默認(rèn)的修飾符為public static final,方法都是抽象方法,默認(rèn)的修飾符為public abstract。

  • 非抽象類實(shí)現(xiàn)一個(gè)接口時(shí),必須要把接口中所有的方法全部實(shí)現(xiàn),抽象類實(shí)現(xiàn)一個(gè)接口時(shí),可以實(shí)現(xiàn)也可以不實(shí)現(xiàn)接口中的方法。

  • 一個(gè)類可以實(shí)現(xiàn)多個(gè)接口,不同接口用 , 分隔。

class 類名 implements 接口類A,接口類B{
    public void 接口實(shí)現(xiàn)方法名();
}
  • 接口與接口之間可以多繼承。
public interface 接口類名 extends 接口A,接口B{
}
接口的作用
1.定義約束規(guī)范

假設(shè)為手機(jī)的功能定義類,大部分手機(jī)功能都相似,在寫代碼時(shí),如果不用接口統(tǒng)一定義這些功能,難免陷入粘貼復(fù)制的局面。

定義規(guī)范
public interface IFirstPhone {

    void call();

    void sms();
}


具體實(shí)現(xiàn)
public class PhoneImpl implements IFirstPhone {

    @Override
    public void call() {
        printf("call");
    }

    @Override
    public void sms() {
        printf("sms");
    }

    public void printf(String message) {
        System.out.println(message);
    }
}
2.功能拓展

接口可以多繼承,多實(shí)現(xiàn),如果有了新產(chǎn)品功能添加可以多定義一個(gè)接口。

public interface ISecondPhone extends IFirstPhone{

    void netConnection();

    void photo();

}

public class PhoneImpl implements IFirstPhone ,ISecondPhone{

    @Override
    public void call() {
        printf("call");
    }

    @Override
    public void sms() {
        printf("sms");
    }

    @Override
    public void netConnection() {
        printf("netConnection");
    }

    @Override
    public void photo() {
        printf("photo");
    }

    public void printf(String message) {
        System.out.println(message);
    }
}
3.程序解耦

是對(duì)于多態(tài)的利用,一個(gè)類實(shí)現(xiàn)了接口后,這個(gè)接口即可以作為這個(gè)類的父類引用,隱藏內(nèi)部實(shí)現(xiàn)。

public class Main {

    public static void main(String[] args){
        ISecondPhone secondPhone = new PhoneImpl();
        secondPhone.call();
        secondPhone.sms();
        secondPhone.netConnection();
        secondPhone.photo();
    }
}
接口補(bǔ)充

JDK1.8前,當(dāng)一個(gè)類實(shí)現(xiàn)接口時(shí),必須重寫接口中所有的方法,否則這個(gè)類將會(huì)成為一個(gè)抽象類。
但是在實(shí)際開(kāi)發(fā)中,接口中有些方法不需要重寫,針對(duì)這個(gè)問(wèn)題,1.8后提供了接口的默認(rèn)方法。

public interface IFirstPhone {

    void call();

    void sms();

    default void cell() {
        System.out.println("不需要強(qiáng)制重寫");
    }
}


public class PhoneImpl implements IFirstPhone {

    @Override
    public void call() {

    }

    @Override
    public void sms() {

    }
}

可以根據(jù)實(shí)際決定默認(rèn)方法是否需要重寫
public class PhoneImpl implements IFirstPhone {

    @Override
    public void call() {

    }

    @Override
    public void sms() {

    }

    @Override
    public void cell() {
        
    }
}

接口中也提供了相應(yīng)的靜態(tài)方法

public interface IFirstPhone {

    void call();

    void sms();

    default void cell() {
        System.out.println("不需要強(qiáng)制重寫");
    }

    static void demo(){
        System.out.println("只能通過(guò)接口名調(diào)用");
    }
}


public class Main {

    public static void main(String[] args){
        IFirstPhone firstPhone = new PhoneImpl();
        firstPhone.cell();
        firstPhone.sms();

        IFirstPhone.demo();//靜態(tài)只能通過(guò)接口名調(diào)用,不能通過(guò)引用
    }
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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

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