在派生类上禁用继承的方法

2022-09-01 07:13:36

在 Java 派生类中,有没有办法“禁用”以其他方式从基类继承的方法和/或字段?

例如,假设您有一个具有方法的基类。您还有从类派生的各种类型:、 、 、 等。Shaperotate()ShapeSquareCircleUpwardArrow

Shape有一种方法。但是我不想对 的用户可用,因为它毫无意义,或者是 的用户,因为我不想能够旋转。rotate()rotate()CircleUpwardArrowUpwardArrow


答案 1

我认为这是不可能的。但是,您可以通过从其规范中删除rotation()方法来进一步优化 Shape类,而是定义另一个名为RotableShape的Shape子类,并让Circular从Shape派生,并从RotingableShape派生所有其他可旋转

例如:

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
}

答案 2

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

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

推荐