2011-07-26 41 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不能在接口中声明,但在抽象类中声明。