ash*_*999 0 java polymorphism inheritance
编辑:这没用,因为我有:
class Animal { ... }
class Horse extends Animal { ... }
class Unicorn extends **Animal** { ... }
Run Code Online (Sandbox Code Playgroud)
很明显,这是一个错字,独角兽应该延伸马,而不是动物.在这里,我以为我在Java的多态性中找到了一个漏洞!
也许这只是我,但这没有意义.假设我有两个Java,Horse和Unicorn类(它是Horse的子类):
public class Horse {
public String speak() {
return "Wow, a talking horse!";
}
}
public class Unicorn extends Horse {
@Override
public String speak() {
return "Unicorns really exist?!";
}
}
Run Code Online (Sandbox Code Playgroud)
此代码无法编译:
public Horse getHorse() {
return new Unicorn(); // Doesn't compile
}
Run Code Online (Sandbox Code Playgroud)
我在Eclipse下使用JRE或JSE 1.6获得编译错误"无法从Unicorn转换为Horse".
为什么不编译?每只独角兽也是一匹马,因此,我正在返回一个有效的马匹实例......不是吗?
我的问题是关于多态如何在Java中工作.我希望这能奏效.对于它的价值,这段代码在.NET 2.0中编译(也许这就是为什么我希望它也能在Java中工作).
你是否完全像这样写了?因为你不能在类定义中使用括号...例如
public class Horse() {
Run Code Online (Sandbox Code Playgroud)
应该
public class Horse {
Run Code Online (Sandbox Code Playgroud)
也
public class Unicorn extends Horse() {
Run Code Online (Sandbox Code Playgroud)
应该
public class Unicorn extends Horse {
Run Code Online (Sandbox Code Playgroud)