抽象類和介面到底是什麼垃圾——秒懂

泰斗賢若如發表於2019-07-14

 

前言:

  這幾天給別人講JavaSE基礎,又把物件導向看了一遍,講的時候發現一個問題,就是當時講抽象類和介面的時候說介面也是抽象類,是個特殊的抽象類,當時聽的時候別人確實能聽懂,因為確實沒多少東西,但是真正用的時候總會猶豫,到底什麼時候該用抽象類什麼時候用介面呢?

 

 

 如何區分使用抽象類和介面

大家在比較抽象類和介面的區別時,一定要強調抽象類描述的是事物的本質,而介面描述的是事物的功能。比如:保溫杯是水杯,所以水杯應該設計為抽象類,保溫杯有保溫的功能,所以保溫應該設計為介面。

 

可理解為:

class 保溫杯 extends 水杯 implements 保溫

  

用例項說話

package zmldemo;
//水杯抽象類
public abstract class Cup {
     String name;//水杯名稱
     String color;//水杯顏色

    public Cup() {
    }

    public Cup(String name, String color) {
        this.name = name;
        this.color = color;
    }
    //水杯使用說明方法
    public abstract void useCup();
}

  

package zmldemo;
//保溫介面
public interface BaoWen {
    //保溫方法
    public void baoWen();
}

  

package zmldemo;
//刷牙杯
public class ShuaYaBei extends Cup {
    public ShuaYaBei() {
    }

    public ShuaYaBei(String name, String color) {
        super(name, color);
    }

    @Override
    public void useCup() {
        System.out.println("我是"+this.color+"的"+this.name+","+"我是用來刷牙的");
    }
}

  

 

package zmldemo;
//保溫杯
public class BaoWenBei extends Cup implements BaoWen{

    public BaoWenBei(){

    }
    public BaoWenBei(String name,String color){
        super(name,color);
    }


    @Override
    public void useCup() {
        System.out.println("我是"+this.color+"的"+this.name+","+"我是用來喝水的");
    }

    @Override
    public void baoWen() {
        System.out.println("我能對水杯裡的水進行保溫");
    }
}

  

package zmldemo;

public class CupTest {
    public static void main(String[] args) {
        ShuaYaBei shuaYaBei = new ShuaYaBei("刷牙杯","紅色");
        shuaYaBei.useCup();

        BaoWenBei baoWenBei = new BaoWenBei("保溫杯","金黃色");
        baoWenBei.useCup();
        baoWenBei.baoWen();


    }
}

  

執行結果:

 

我想看到這,學過抽象類和介面的朋友應該能理解了,那本篇標題“抽象類和介面到底是什麼垃圾——秒懂”對應的部分完成了,既然都說到這了,再來點延申。

話題延申

抽象類和介面能例項化物件嗎?

這個問題其實也有很多人糾結,我之前專門有過對這個問題在網上進行搜尋查詢,看了好幾篇別人寫的部落格,結果答案不一,理解各不相同,有的部落格裡的理解還有錯誤,容易對別人誤導,後來我自己查資料,用自己的理解寫了一篇部落格《抽象類能例項化嗎?——口氣很強硬——“不能”(詳解)》https://www.cnblogs.com/zyx110/p/10648119.html,結果當然正如其名所示,是不能的,至於為何,裡面有詳細的解釋,大家自行查閱,在這就不做補充了。

 

 

*****************************************************************************************************

我的部落格園地址:https://www.cnblogs.com/zyx110/

轉載請說明出處

我不能保證我所說的都是對的,但我能保證每一篇都是用心去寫的,我始終認同“分享的越多,你的價值增值越大”,歡迎大家關注我的技術分享“Java匹馬行天下”和學習心得分享“匹馬行天下”,在分享中進步,越努力越幸運,期待我們都有美好的明天!

支援我的朋友們記得點波推薦哦,您的肯定就是我進步的動力。

 

相關文章