Java 限制由少数子类重写的类方法
我在一次面试中问了一个问题Java 限制由少数子类重写的类方法,java,Java,我在一次面试中问了一个问题 class Birds { public void fly(); public void eat(); public void sleep(); } Have several other classes extending it like - Sparrow extends Birds{ overriding fly();// Sparrow can have its own style to fly overriding
class Birds {
public void fly();
public void eat();
public void sleep();
}
Have several other classes extending it like -
Sparrow extends Birds{
overriding fly();// Sparrow can have its own style to fly
overriding eat();
overriding sleep();
}
Eagle extends Birds{
overriding fly();// Eagle can have its own style to fly
}
Ostrich extends Birds {
overriding fly();// Ostrich could not fly !!!
}
我怎样才能限制这种情况??因为父类在这里不知道它的子类。
Birds类由几个类扩展,有些类可以覆盖,有些类不能覆盖。您需要使用组合:
Flyable
的接口,该接口具有fly()
方法Sparrow
和Eagle
实现该接口<代码>鸵鸟
没有Living
的接口,比如说它有eat()
和sleep()
方法。所有类型都实现该接口Aeroplane()
对象,该对象实现可飞行
,但不实现生活
您可以简单地添加FlyingBird和GroundBird类,并将它们抽象化
public class Birds {
public void eat() {
// default implementation
}
public void sleep() {
// default implementation
}
}
abstract class FlyingBird extends Birds {
public abstract void fly();
}
abstract class GroundBird extends Birds {
public abstract void walk();
}
class Sparrow extends FlyingBird {
@Override
public void eat() {
// different implementation
}
@Override
public void sleep() {
// different implementation
}
@Override
public void fly() {
// some impl
}
}
class Eagle extends FlyingBird {
@Override
public void fly() {
// some impl
}
}
class Ostrich extends GroundBird {
@Override
public void walk() {
// walk implementation
}
}
考虑策略工厂模式“如果你把一个方法声明为‘最终’,没有一个类可以重写它。同样的是我的答案使用界面,但是面试官问:“只使用课堂回答,界面很好,这样你可以做你能为班级做些什么?”所以还有其他的解决方法,对吗?您可以使用抽象类和
final
。但这不太好。非常感谢你们大家。