可能重复:
Abstract class and Interface class?
Java: interface / abstract classes / abstract method
在Java中,抽象类实现了对接口的任何使用。我知道接口的一个优点是,如果我们实现一个接口,那么我们也可以扩展另一个类。 Java中是否有任何其他用途或优势?
答案 0 :(得分:55)
接口允许您使用不同层次结构中的类polymorphically。
例如,假设您有以下界面:
public interface Movable {
void move();
}
任何数量的类跨类层次结构都可以以自己特定的方式实现Movable
,但仍然可以由一些调用者以统一的方式使用。
所以如果你有以下两个类:
public class Car extends Vehicle implements Movable {
public void move() {
//implement move, vroom, vroom!
}
}
public class Horse extends Animal implements Movable {
public void move() {
//implement move, neigh!
}
}
从来电者的角度来看,它只是一个Movable
Movable movable = ...;
movable.move(); //who am I?
我希望这会有所帮助。
答案 1 :(得分:22)
您喜欢什么:一个抽象类中的数千个抽象方法并继承此类或为特定抽象方法创建尽可能多的接口,并根据需要继承尽可能多的接口,只使用您想要的那些...
abstract class A
{
//thousands of abstract method();
abstract methodA();
abstract methodB();
abstract methodC();
}
//OR
interface ForOnlymethodA
{
void methodA();
}
interface FormethodBandmethodC
{
void methodB();
void methodC();
}
因此,只使用继承特定接口所需的方法,如果继承了Abstract
类,则不必继承所有在一个类中不需要的方法,而在某些类中可能需要其他课程..
答案 2 :(得分:7)
可以实现多个接口,但只能扩展一个类。完全抽象的类很像接口,除了抽象类可以包含变量。
这取决于你需要什么。 C ++允许您扩展所需的类,并且它会变成一种灾难。只有一个超类的好处是,你只需要担心另外一组实现(即使父母有父母,父母的特定组合也会成为你的父母......)
接口允许一个对象扮演多个角色,但它们不允许代码重用。
这简化了对继承的思考。总而言之,我认为他们做对了。
答案 3 :(得分:1)
接口允许Java中的nominative typing 跨越不相交class hierarchies。
这是由于类层次结构的“单inheritance”限制和“封闭类型”。我将继续关注subtype polymorphism和Java对它的实现; - )
此问题还有其他解决方案,例如动态类型,结构类型,多重继承和特征等。每种方法都有优点和缺点。接口只是Java采用的方法。
答案 4 :(得分:0)
抽象类的优势?除了你可以实现多个接口但只扩展一个(抽象或非抽象)类的事实,它与抽象类相同,它的所有方法都是抽象的和公共的
答案 5 :(得分:-1)
Java界面
- 提供data encapsulation
这意味着无法看到方法的实现。扩展此接口的类必须实现其中声明的所有方法。
更多信息:wiki answer