假设抽象类只有在其中声明的抽象方法,并且接口具有抽象方法。
这对抽象方法m
有何影响?
abstract class A {
abstract void m();
}
interface A {
abstract void m();
}
答案 0 :(得分:3)
即使抽象类是纯抽象,即只包含抽象方法而且不包含状态,您的子类extends
也只是这个类,因此您只有单继承。
但是,您可以实现多个接口。
因此,如果要强制类成为A
的子类而不是其他类的子类,请使用抽象类。否则定义接口。
答案 1 :(得分:1)
如果您不确切知道所有实体是否需要覆盖特定方法,那么界面也会更有用。比如说鸟类,有些可以飞,有些可以飞。您不希望强制覆盖所有fly()
子类中的Bird
方法。
public abstract class Bird(){
...
public abstract void eat(); //all birds eat
public abstract void sleep(); //all birds sleep
public abstract void fly(); //is wrong here since not all birds can fly
}
更正确的方法是为特定情况定义接口,因此在这种情况下
public interface Flyable{
abstract void fly();
}
然后,你可以根据他们实现Flyable
接口的事实,将你的子类定义为可以飞行的鸟类。
public class Eagle extends Bird implements Flyable{
@override
public void fly(); //needed
-----
}
public class Ostrich extends Bird{
//does't fly
}