2011-07-26 73 views
2

可能重複:
Java: interface/abstract classes/abstract method抽象類

我有4個抽象類methods.All這些方法都是抽象的。 我的抽象類是否等同於一個接口?

public abstract class ABC{ 
    abstract void f1(); 
    abstract void f2(); 
    abstract void f3(); 
    abstract void f4(); 
} 

任何人都可以解釋,如果它不是?

+1

這已經討論了很多次。只是[很多...的一個鏈接](http://stackoverflow.com/questions/2124951/java-interface-abstract-classes-abstract-method) – Jacob

回答

1

不。一個類可以「實現」多個接口,但只能「擴展」一個超類,包括抽象類。

1

AFAIK,Java不支持像C++那樣的多重繼承。但是它支持多種實現(一個類可以實現多個接口)。

因此,當您從ABC繼承時,您將無法繼承其他任何類。但是,如果你把它變成一個界面 - 你可以做到這一點。

1

粗略地說,編號爲 一個類可以比一次一個接口多一個implements,但是您可以只抽象類extend

1

抽象類不同於接口,因爲抽象類可能包含方法的具體實現,而接口可能不包含。

例如,它是合法的抽象類有這樣的具體方法:

public class Abstractclass{ 
abstract void f1(); 
/** 
    * this is a concrete method with implementation 
    */ 
void f2(){ 
    System.out.println("do something"); 
} 
} 

但對於接口,所有的方法都隱含抽象。你不能有具體的方法:

public interface InterfaceClass{ 
    void f2(); 
    void f3(); 
} 

interface就像一個合同,沒有實現開發商。它基本上指定what。然後開發者實現這個接口來定義how

一個abstract類包含一些對子類有用的實現。

0

抽象類和接口之間存在不少差異。我可以舉幾個例子(我不是Java程序員,但C#程序員,但認爲這些差異仍然適用)。

一個接口不是繼承的,而是一個抽象類。如果你的編程語言不支持多重繼承,這將是重要的。

接口不能包含代碼,只有簽名,但抽象類可以包含代碼。

訪問級別:private,protected,public不能在接口中聲明,但在抽象類中聲明。