【发布时间】:2018-11-14 18:05:38
【问题描述】:
我在 debian 9 上使用 eclipse 2018-12 (4.10) / Java 11 遇到了这个问题
让我们声明我有一个基类
class A {
private typeA prop;
TypeA getProp(){
return this.prop;
}
}
还有一个派生的
class B extends A{
private typeB prop;
TypeB getProp(){
return this.prop;
}
我希望 B 类中的道具隐藏 A 类中的道具,但在 Eclipse 中,我在 B 类中收到了 getProp 方法的错误消息: 返回类型与A.getProp()不兼容
有什么想法吗?
【问题讨论】:
-
你覆盖了
getProp;以不同的方式命名它们。 -
如果返回类型不同,任何方法都不会被覆盖。
-
除了您的代码无法编译的问题之外,您还有一个返回
TypeB的方法,并且您正尝试返回typeB类型的变量。你也缺少分号。 -
我只是不想命名不同..为什么 B 类中的 getProp() 不会重载 A 类中的 getProp ?
-
这将完全破坏多态性和 Liskov 原则。 A 有一个返回 TypeA 的 getProp()。 B 扩展了 A。所以 B 的任何实例都是 A 的实例。因此在 B 实例上调用 getProp() 必须返回 TypeA:这是 A 类的约定。只需使用这段代码,它应该可以工作:@987654326 @。您的代码将使这成为不可能。
标签: java inheritance properties field