![](/img/trans.png)
[英]What is difference between abstract class with all abstract methods and interface(not technically)
[英]What is the difference between an abstract class and a class that has all its methods abstract?
我不知道什么是一個抽象類,具有其所有的方法抽象類之間在Java中的區別? 我的意思是, 抽象類只是一個類,其方法自動變為抽象 ?
絕對不。 實際上,一個類可以是抽象的,沒有任何方法是抽象的,盡管這是相對罕見的(參見下面Mark的評論中的一個例子)。 另一方面,如果一個類有任何抽象方法,那么它必須被聲明為abstract。
一般來說,抽象類的目的是為骨架提供一些非抽象行為,但其他位仍由子類填充。 例如,這可以與模板方法模式一起使用。
任何包含一個或多個抽象方法的類也必須聲明為abstract。 要聲明類抽象,只需在類聲明開頭的class關鍵字前面使用abstract關鍵字。 可以沒有抽象類的對象。 也就是說,不能使用new運算符直接實例化抽象類。 這樣的對象沒用,因為抽象類沒有完全定義。 此外,您不能聲明抽象構造函數或抽象靜態方法。 抽象類的任何子類都必須實現超類中的所有抽象方法,或者本身聲明為抽象方法。
抽象類和接口之間的唯一區別是抽象類可以繼承而接口不能,因此接口沒有任何構造函數與抽象類相反。
每當你在類中創建一個抽象方法時,你就會在類名之前明確提到abstract關鍵字,就像這樣
public abstract class Test {
abstract void show();
}
以下是Java中與Abstract相關的要點
- >抽象類是無法實例化的類之一。
- >如果你想從子類(其他人)實現任何方法,那么抽象方法可以在這個意義上使用。
- >抽象類是不完整的,子類必須聲明缺失的片段才能成為具體類(其對象可以被實例化的類),否則這些子類也成為抽象類。
- >你可以通過“抽象類”實現抽象,這是OOP的主要支柱。 抽象隱藏了對象的無關細節。
- > IS A關系的抽象用法(繼承)。
- >抽象用於實現多態行為(OOP的另一個主要支柱)
- >抽象類不應該是私有的,不包含私有方法。
- >擴展單個抽象類不是多個,因為Java是單個支持的繼承
- >抽象類必須包含1個或多個抽象方法
- >如果任何類包含抽象方法,那么它應該顯式聲明抽象類,即使它包含具體方法。
- >構造函數和靜態方法不能聲明為抽象,因為構造函數不是繼承的。
- >如果子類沒有實現超類的抽象方法,那么它也變成了抽象類。
- >嘗試實例化抽象類的對象是編譯錯誤。
- >抽象超類變量可以保存子具體對象的引用。
在其聲明中包含abstract關鍵字的類稱為抽象類 。
如果您不想為所有抽象方法提供實現,那么有一個適配器類的概念 :示例:
abstract class A{
public void m1();
public void m2();
public void m3();
}
class B extends A{
public void m1(){}
public void m2(){}
public void m3(){}
}
class C extends B{
public void m2(){
System.out.println("Hello m2");
}
public static void main(String args){
C obj=new C();
C.m2();
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.