【发布时间】:2018-04-09 06:58:24
【问题描述】:
我有下一个情况:
有一个抽象类
public abstract class SuperClass {
public abstract void getString();
public abstract void method2();
}
public class InheritClass1 extends SuperClass {
@Override
public void getString(){...};
@Override
public void method2(){...};
}
public class InheritClass2 extends SuperClass {
@Override
public void getString{...};
@Override
public void method2(){...};
public void customMethod(){...};
}
还有一个类有一个接受 SuperClass 对象作为参数的方法。根据从 getString 返回的字符串类型,我执行不同的操作。我的情况是我试图在对象属于父类时调用子方法:
public class Processor {
public String method(SuperClass type) {
switch (type.getString()) {
case "1":
return "OK"
case "2":
return ((InheritClass2) type).customMethod()
}
}
我明白这是一个糟糕的设计,请你帮我找到解决这个问题的最佳解决方案。也许泛型在这种情况下是合适的。此外,customMethod() 应该是并非所有类的一部分。
【问题讨论】:
-
添加非抽象
customMethod()对您的父类没有任何作用,仅在需要时覆盖它.. -
为什么不将
customMethod拉到父级,默认实现为return "OK";?然后,子实现可以进行getString检查,它仍然需要 -
你的 getString() 方法声明应该返回一个字符串而不是 void。
-
注意,如果您希望
Processor类中的method()编译,getString()和cutsomMethod()的返回类型应为String,因为此方法返回String值.
标签: java generics inheritance polymorphism