我有一个抽象方法method1和method2的抽象类。我有扩展抽象类的类A,B和C.
我的问题是如何限制B类仅覆盖方法2?我希望所有其他类能够按意愿覆盖任何方法。
如果使用抽象类无法实现这一点,是否可以使用接口实现这种情况?如果是这样,你能用一个例子来解释我吗?
这是我想要实现的一个这样的案例。抽象类鸟有抽象方法fly()。我希望老鹰能够覆盖它而不是类企鹅
abstract class bird{
abstract void fly();
}
class eagle extends bird{
@override
void fly(){
Sysout("I can fly really high!");
}
class penguin extends bird{
@override
/*How do I make sure this method is not at overridden, because there are chances that this method could be accidentally overridden*/
void fly(){
Sysout("I cannot fly");
}
}
答案 0 :(得分:5)
您可以在B
的中间创建一个类,并覆盖method2
的超类,并将其标记为final
。然后,B
将从此中产阶级延伸,并且无法覆盖method2
。
请注意,在这种情况下,最好通过使用接口而不是扩展方法来添加行为。所以,例如:
public interface CanFly {
void fly();
}
public class Eagle implements CanFly {
@Override
public void fly() {
//...
}
}
public class Penguin {
//I cannot fly, I do not need to implement CanFly
}
答案 1 :(得分:0)
你不能......你可以允许每个子类,也可以不允许每个子类。 只需为您不希望由B实现的方法创建一个接口,并使A和C实现此接口,而B只是扩展abstact类。