Java中接口的实际用途是什么?

20

1
这个问题以不同的形式被问过很多次了。 - Stephen C
1
要实现一个接口,必须在类的源代码中出现该接口定义的所有方法,才能成功编译。这样,接口允许一个类更加正式地承诺它所提供的行为。 - Ahmed Raza
6个回答

62

接口允许你在不同的继承层次结构中使用类,实现多态

举个例子,假如你有以下接口:

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?
我希望这可以帮到你。

2
感谢您帮助我理解接口和抽象类之间的区别,并提供适当的示例。 - kandarp

26

你喜欢的是:在一个抽象类中有成千上万个抽象方法,然后继承这个类;或者为特定的抽象方法制作尽可能多的接口,并通过继承尽可能多的接口来仅使用所需的接口...

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类,则会在一个类中不必要地继承所有不需要的方法,并且可能需要在其他一些类中使用。


7
多个接口可以被实现,但只能扩展一个类。完全抽象的类很像接口,但抽象类可以包含变量。
这真的取决于你需要什么。C++允许你扩展任意多个类,但会变得有些混乱。只有一个超类的好处是,只有一个其他实现集合需要考虑(即使父类有父类,父类的特定组合也成为你的父类...)
接口允许一个对象扮演多个角色,但它们不允许代码重用。
这旨在简化对继承的思考。总的来说,我认为他们做得没错。

感谢提供宝贵的信息。 - kandarp

1

接口允许Java中主格类型在不同的类层次结构之间交叉使用

这是由于类层次结构上的“单一继承”限制和“封闭类型”。我将对子类型多态性和Java的实现保持沉默;-)

还有其他解决此问题的方法,例如动态类型、结构类型、多重继承和特征等。每种方法都有优点和缺点。接口只是Java采用的一种方法。


1
除了你可以实现多个接口但只能扩展一个(抽象或非抽象)类之外,与抽象类相比的优势在于它的所有方法都是抽象和公共的,这与抽象类是相同的。

-1
Java接口 - 提供了数据封装,这意味着方法的实现是看不到的。扩展此接口的类必须实现其中声明的所有方法。
更多信息:维基百科答案

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接