禁用派生类上的继承方法

新手上路,请多包涵

有什么方法可以在 Java 派生类中“禁用”从基类继承的方法和/或字段?

例如,假设您有一个 Shape 基类,它有一个 rotate() 方法。 You also have various types derived from the Shape class: Square , Circle , UpwardArrow , etc.

Shape 有一个 rotate() 方法。但我不希望 rotate() 可供 Circle 的用户使用,因为它毫无意义,或者 UpwardArrow 的用户不想要 UpwardArrow 因为我不想要 --- 能够旋转。

原文由 Jean-François Corbett 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 379
2 个回答

我不认为这是可能的。但是,您可以通过从其规范中 删除 rotate() 方法来进一步改进 Shape 类,而是定义另一个 Shape 的 子类 RotatableShape 并让 Circle 派生Shape 和所有其他 Rotatable 类 派生自 RotatableShape

例如:

 public class Shape{
 //all the generic methods except rotate()
}

public class RotatableShape extends Shape{

 public void rotate(){
    //Some Code here...
 }
}

public class Circle extends Shape{
 //Your implementation specific to Circle
}

public class Rectangle extends RotatableShape{
 //Your implementation specific to Rectangle
}

原文由 Chandu 发布,翻译遵循 CC BY-SA 2.5 许可协议

您可以在要禁用此操作的类中重写特定方法“rotate()”,如下所示

public void rotate() {
    throw new UnsupportedOperationException();
}

原文由 Wavyx 发布,翻译遵循 CC BY-SA 2.5 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题