我知道“接口”和“抽象类”之间的区别。但是,您能否提供一个可以通过“接口”构建但不能通过“抽象类”构建的单一示例,而仅留下“多重继承”的示例?
最佳答案
一个简单的示例是表示相同实体但具有不同行为的对象。例如考虑鸟类。有些鸟会飞,有些鸟不会飞。定义一个abstract class Bird
强制其所有子类实现fly
方法是错误的。
因此,在这种情况下,可以在eat()
中将方法定义为sleep()
或abstract class Bird
作为抽象,但不能将fly()
定义为抽象,因为并非所有鸟类都可以飞翔。
通常,您将定义一个称为instace Flyable
的接口,该接口包含fly()
方法的定义,而实现该接口的类必须覆盖该方法的定义。
最后,您将得到如下结果:
public abstract class Bird{
public abstract void eat();
public abstract void sleep();
}
public interface Flyable{
void fly();
}
public class Eagle extends Bird implements Flyable{
.... has to implement eat(), sleep() and fly()
}
public class Ostrich extends Bird{
... has to implement only eat() and sleep() since ostrich can't fly
}