成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

抽象類和接口的區(qū)別已經(jīng)變了

wow_worktile / 3162人閱讀

摘要:抽象方法沒有方法體抽象方法權(quán)限修飾符不能為抽象方法的目的就是為了讓子類繼承重寫的,所以抽象方法不能私有,不能修飾。另外,添加默認(rèn)方法不會影響函數(shù)式接口的使用。

原文:抽象類和接口的區(qū)別已經(jīng)變了

隨著JDK的不斷迭代,抽象類和接口的區(qū)別已經(jīng)有了些許改變,你是否還停留在JDK 7 的答案呢?

定義

抽象類定義通過 abstract class

public abstract class A {}

接口定義通過 abstract(默認(rèn)) interface

public abstract interface A {}
派生方式

子類繼承抽象類通過 extends , 單繼承

public abstract class A {}
public class B extends A {}

抽象類實(shí)現(xiàn)接口通過 implements , 多實(shí)現(xiàn),接口繼承接口通過 extends

public interface A {}
public interface B {}

public interface C extends A {}

public class D implements B,C {}

子類(非抽象類)必須實(shí)現(xiàn) 抽象父類或接口 的全部未實(shí)現(xiàn)方法

實(shí)例化

抽象類和接口均不能實(shí)例化

抽象類可以有構(gòu)造方法,接口不能有構(gòu)造方法

public abstract class A {
  public A () {}
}
屬性

接口中定義屬性只能是 (public)靜態(tài)常量

public interface A {
  //默認(rèn)(public static final) String A="ABC";
  String A = "ABC";
}

抽象類中可以定義有任意變量常量

//任意訪問修飾符的變量及常量
public abstract class A {
    private String a = "a";
    boolean b = true;
    public char c = "a";
    protected int d = 2;
    public static final int e = 1;
}
方法 抽象類

抽象類中可以和普通類中一樣擁有各自普通方法,也可以擁有(不必須)抽象方法。

抽象方法沒有方法體

抽象方法權(quán)限修飾符不能為 pirvate

public abstract class A {

  // protected or default
    public abstract void a();
}
抽象方法的目的就是為了讓子類繼承重寫的,所以抽象方法不能私有,不能final修飾。
接口 JDK 7

只能有方法的聲明

方法必須聲明為 public (默認(rèn))

public interface A {
  //默認(rèn)(public abstract) void test();
    void test();
}
JDK 8

增加默認(rèn)實(shí)現(xiàn)方法

public interface A {
  // 這里的 default 不能省略
  public(默認(rèn)自動添加) default void defaultMethod(){
    //do something
  } 
}
默認(rèn)方法的出現(xiàn)主要是面向類庫的開發(fā)者的,在堆接口進(jìn)行擴(kuò)展時,大量的實(shí)現(xiàn)類會讓人望而卻步。擁有默認(rèn)方法后,子類可直接繼承使用或重寫。另外,添加默認(rèn)方法不會影響函數(shù)式接口的使用。

增加靜態(tài)方法

public interface A {
  // 靜態(tài)方法
  public(默認(rèn)自動添加) static void staticMethod(){
    //do something
  }
}
靜態(tài)方法的調(diào)用直接通過接口名調(diào)用A.staticMethod() ,子類無法重寫(override), 但可以有同名方法。
JDK 9

增加私有方法

public interface A {
  // 不能被子類繼承或重寫
  private void privateMethod(){
    //do something
  } 
}

增加私有靜態(tài)方法

public interface A {
  // 不能被子類繼承或重寫
  private static void privateStaticMethod(){
    //do something
  } 
}
這兩種私有方法其實(shí)是對JDK8 默認(rèn)方法和靜態(tài)方法 的補(bǔ)充,這樣可以避免代碼的冗余。
設(shè)計

抽象類是對一組類的共同特征進(jìn)行抽象 ,是子類的模板(is-a)

接口是對行為的抽象,是一種行為的規(guī)范和約束 (like-a)

往期文章一覽

千萬不要這樣使用 Arrays.asList !

八張圖帶你認(rèn)識Java

Java開發(fā)必備手冊

關(guān)注微信公眾號 「碼上實(shí)戰(zhàn)」 回復(fù) :面試視頻 和 架構(gòu)師 送你非常不錯的資料!

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/75624.html

相關(guān)文章

  • 抽象類和接口區(qū)別

    摘要:抽象類是對整個類整體進(jìn)行抽象,包括屬性行為,但是接口卻是對類局部行為進(jìn)行抽象。因此最好的解決辦法是單獨(dú)將報警設(shè)計為一個接口,包含行為設(shè)計為單獨(dú)的一個抽象類,包含和兩種行為。 抽象類和接口的區(qū)別 1.語法層面上的區(qū)別   1)抽象類可以提供成員方法的實(shí)現(xiàn)細(xì)節(jié),而接口中只能存在public abstract 方法;   2)抽象類中的成員變量可以是各種類型的,而接口中的成員變量只能是pub...

    ThinkSNS 評論0 收藏0
  • java抽象類和接口總結(jié)

    摘要:如果一個非抽象類遵循了某個接口,就必須實(shí)現(xiàn)該接口中的所有方法。抽象類是對整個類整體進(jìn)行抽象,包括屬性行為,但是接口卻是對類局部行為進(jìn)行抽象。因此最好的解決辦法是單獨(dú)將報警設(shè)計為一個接口,包含行為設(shè)計為單獨(dú)的一個抽象類,包含和兩種行為。 一、抽象類 二、接口 三、抽象類和接口的區(qū)別 一、抽象類 在了解抽象類之前,先來了解一下抽象方法。抽象方法是一種特殊的方法:它只有聲明,而沒有具體的實(shí)現(xiàn)...

    荊兆峰 評論0 收藏0
  • 多維度分析:抽象類和接口區(qū)別

    摘要:本文中,作者通過多個方面深入剖析抽象類和接口的區(qū)別,并結(jié)合經(jīng)驗(yàn)供讀者借鑒學(xué)習(xí),本文系工程師編譯整理。在開發(fā)人員崗位面試時,是否了解抽象類和接口之間的基本區(qū)別是一個很重要的考量因素。 【編者按】本文作者是Sebastian Malaca,是面向?qū)ο缶幊痰目駸嵴?,不斷深化研究整潔代碼和高代碼質(zhì)量。本文中,作者通過多個方面深入剖析抽象類和接口的區(qū)別,并結(jié)合經(jīng)驗(yàn)供讀者借鑒學(xué)習(xí),本文系 OneA...

    chengtao1633 評論0 收藏0
  • Java抽象類與接口區(qū)別

    摘要:很多常見的面試題都會出諸如抽象類和接口有什么區(qū)別,什么情況下會使用抽象類和什么情況你會使用接口這樣的問題。在討論它們之間的不同點(diǎn)之前,我們先看看抽象類接口各自的特性。抽象類抽象類是用來捕捉子類的通用特性的。 很多常見的面試題都會出諸如抽象類和接口有什么區(qū)別,什么情況下會使用抽象類和什么情況你會使用接口這樣的問題。本文我們將仔細(xì)討論這些話題。 在討論它們之間的不同點(diǎn)之前,我們先看看抽象類...

    Ethan815 評論0 收藏0
  • PHP設(shè)計模式(二):抽象類和接口

    摘要:在設(shè)計模式中,抽象類不能夠被實(shí)例化初始化,但是可以依靠具體類的繼承來實(shí)現(xiàn)。對于大型項目來說,對象都是由基本的抽象類繼承實(shí)現(xiàn),而這些類的方法通常都由接口來定義。 原文地址:PHP設(shè)計模式(二):抽象類和接口 Introduction 對于編程來說,對事物的抽象是一個老生常談的話題,抽象問題更利于面向?qū)ο缶幊桃约俺绦蛟O(shè)計模式。和C/C++,Java,Python等語言一樣,PHP也支持面向...

    xialong 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<