请告诉我接口在Java中比抽象类更好的情况。
我认为你误解了接口和抽象类的真正含义。
接口是一种编程结构,用于定义您想要公开或向其他模块提供的函数/服务。它是一种契约,您承诺提供某些功能或服务,但隐藏实现方式,以便可以更改实现方式而不影响契约。
抽象类是一个部分实现的类,除了作为多个具有实际意义的子类的父类之外,没有任何实际意义。抽象类是一种特殊的父类,为多个子类提供默认功能。它被创建为抽象类,因为找不到合适的具体父类。
在良好的设计中,您应该始终创建一个接口。但抽象类是可选的。如果找不到具体的父类,请创建一个抽象类并实现接口,然后为这些接口函数提供默认实现(如果可能);否则将其标记为抽象函数,并将实现留给子类。
在Java中,每个类只能有一个直接抽象超类。因此,如果您需要公开两个或多个接口,则接口非常有用。
当你需要在任何类中实现接口时,因为接口可以在任何类或接口中实现,但抽象类不能这样做。例如,在 Applet 中,始终将 Applet 类扩展到我们的 Applet 应用程序中,在这种情况下,我们无法扩展抽象类。
抽象类:定义或声明一个更重要的方法。例如:车辆必须具有形状和引擎。因此,我们将这种行为放在抽象类中。
abstract class Vehicle {
abstract void shape();
abstract void engine();
}
接口类:除了像move、honk等属性之外,还有提供额外行为给你的具体类的接口。
interface Honk{
void honk();
}
interface moveable{
void move();
}
class Car extends Vehicle implements Moveable {
@Override
void shape() {
System.out.println("car's shape");
}
@Override
void Engine() {
System.out.println("car's engine");
}
@Override
void move() {
System.out.println("car's can move");
}
}
但我没有实现Honk行为。如果您想要,可以实现多个接口。