java中抽象類和介面區別

2021-09-19 16:35:41 字數 2021 閱讀 8121

抽象類前使用abstract關鍵字修飾,則該類為抽象類

應用場景

在某些情況下,某個父類只是知道其子類應該包含怎樣的方法,但無法準確的知道這些子類如何實現這些方法。

從多個具有相同特徵的類中抽象出乙個抽象類,以這個抽象類作為子類的模板,從而避免了子類設計的隨意性

作用

限制規定子類必須實現某些方法,但不關注實現細節

規則

1.含有抽象方法的類,一定是抽象類; 抽象類中可以宣告成員變數、常量、成員方法、抽象方法,抽象類中不一定要有抽象方法; 抽象類不能被例項化;

2.抽象類可以被繼承;

3. 可以通過兩種方式獲得抽象類物件:父類引用指向子類物件、匿名內部類;

4.子類必須重寫抽象父類的所有抽象方法,或者是把子類也定義為抽象類;

5.如果乙個類繼承的抽象父類還有上級抽象父類,那麼子類中需要要重寫所有抽象父類的所有抽象方法;

6. 抽象類也可以繼承非抽象類,同時繼承了父類的所有非私有的屬性和方法;

//定義乙個抽象類

public abstract class animal

public class dog extends animal 

@override

public void sleep()

}

public class cat extends animal 

@override

public void sleep()

}

public class initail 

}

對於抽象類的一些簡單認知:

什麼時候使用抽象類和抽象方法,例如你定義了乙個動物類,這個動物類有吃飯和睡覺的方法,但其他具體的動物比如貓狗豬這些動物繼承動物類,它們同時也繼承了動物類吃飯睡覺的方法,但每個動物的吃飯和睡覺的方式都不同,他們都要進行對其父類方法進行重寫,那麼父類的方法就要定義為抽象方法,有抽象方法的就要是抽象類,那有些人就會問,我們不把父類的方法定義為抽象方法,只對其進行重寫不也一樣嗎?答案是的,你使用抽象類可以提高**的維護性,你只需要在抽象父類定義每個子類都會用到的抽象方法,那麼在子類繼承父類的時候,子類重寫父類的抽象方法,方法的具體實現都在子類中進行完成,減少**量。

package com.company.test0507;

public class phone

public void song()

}

package com.company.test0507;

public inte***ce listensong

package com.company.test0507;

public class newphone extends phone implements listensong

}

package com.company.test0507;

public class mp4 implements listensong

}

package com.company.test0507;

public class until

}

可以使用介面去描述連個不同型別的類具有的相同的特徵。

介面的另一種實現

與匿名類的結合:

語法的格式:

第一種:

介面名 i=new 介面名()

};//注意分號結尾

第二種:

new 介面名()

}.method();

介面是一種特殊的抽象類,抽象類描述的是類的本質,介面描述的是不同型別的類的共有特徵,抽象類解決了子類繼承父類的隨意性,介面解決了單繼承的問題。

抽象類和介面區別

含有abstract修飾符的class即為抽象類,abstract類不能建立的例項物件。含有abstract方法的類必須定義為abstract class,abstract class類中的方法不必是抽象的。abstract class類中定義抽象方法必須在具體 concrete 子類中實現,所以,...

抽象類和介面區別

在開發人員崗位面試時,是否了解抽象類和介面之間的基本區別是乙個很重要的考量因素。完全不是。筆者面試過很多人,通常問的第乙個問題是關於介面和抽象類的區別。但實際上很少有程式設計師能給出正確的答案。就這個問題來說,初級程式設計師可能都會清楚之間的區別,可能也並不一定理解其背後的原因,但其結構上的差異,特...

抽象類與介面區別

抽象類 抽象類無法例項化 即不能new 使用抽象方法,該方法是只需宣告不需要實現。抽象方法需要定義在抽象類中,乙個類包含抽象方法,這個類一定是抽象類。如果某個類是抽象類,他可以有具體方法 有宣告,有實現 也可以有抽象方法。子類繼承父類 該父類為抽象類 就要實現該父類的所定義的所有抽象方法,否則該子類...