【发布时间】:2020-07-02 13:48:43
【问题描述】:
我有一个 Shape 和 Square 类:
public class Shape {..}
public class Square extends Shape {...}
我有一个父子类,它们具有处理形状/正方形的方法:
public class Parent(){
public void doSomething(Shape a){
print("Parent doSomething called");
}
}
public class Child extends Parent(){
@Override
public doSomething(Shape a){
print("Child doSomething for SHAPE called");
}
public doSomething(Square a){
print("Child doSomething for SQUARE called");
}
}
现在,当我执行此操作时:
Shape square = new Square();
Parent parent = new Child();
parent.doSomething(square);
正如预期的那样,“Child doSomething for SHAPE called”是输出。
有没有办法通过纯多态性来获得“SQUARE 的子 doSomething 调用”输出,而无需在 Parent 类中定义 doSomething(Square a) 并使用@Override 在孩子中?
不用说,我试图避免使用运算符实例和额外的铸件进行任何 if/else 检查。
【问题讨论】:
-
“纯”解决方案是双重分派,java 没有实现。您可以使用访问者模式作为解决方法。
-
@NathanHughes 有没有实现这个的语言? C# 实现了吗?
标签: java oop inheritance polymorphism overloading