Java 覆盖方法不起作用
Java override method doesn't work
谢谢大家。事实上,有人已经为那个 class 打了补丁,这打乱了正确的行为。
最后我通过检查 classloader 找到了这个。
见谅:)
这里,public class Son
extends public class Parent
extends public class GrandParent
在 Parent 中,此方法覆盖 GrandParent:
@Override
public String getSomething() {
return "blabla";
}
在 Son 中,相同的方法覆盖 Parent:
@Override
public String getSomething() {
return null;
}
奇怪的是,当我 运行 声明为 GrandParent 并构造为 Son 的对象的 getSomething() 时,它进入了 Parent 的代码并且 returns "blabla" 而不是 null .
有没有人见过这个问题?任何人都可以对此做出解释吗?谢谢。
如果您尝试这个简单的代码:
public class GrandParent
{
public String f() {
return "grand parent";
}
}
public class Parent extends GrandParent
{
@Override public String f() {
return "parent";
}
}
public class Son extends Parent
{
@Override public String f() {
return "son";
}
}
public class Test
{
public static void main(String[] args) {
GrandParent p = new Son();
System.out.println(p.f());
}
}
你会看到打印出来的字符串是"son"
。你的代码有问题。
它甚至可以与父实例一起使用,请查看:
public class Parent {
public String getSomething()
{
return "parent";
}
}
public class Son extends Parent {
@Override
public String getSomething() {
return "son";
}
public static void main(String[] args) {
Son son = new Son();
System.out.println(son.getSomething());
Parent par = (Parent)son;
System.out.println(par.getSomething());
}
}
结果:
son
son
谢谢大家。事实上,有人已经为那个 class 打了补丁,这打乱了正确的行为。 最后我通过检查 classloader 找到了这个。 见谅:)
这里,public class Son
extends public class Parent
extends public class GrandParent
在 Parent 中,此方法覆盖 GrandParent:
@Override
public String getSomething() {
return "blabla";
}
在 Son 中,相同的方法覆盖 Parent:
@Override
public String getSomething() {
return null;
}
奇怪的是,当我 运行 声明为 GrandParent 并构造为 Son 的对象的 getSomething() 时,它进入了 Parent 的代码并且 returns "blabla" 而不是 null .
有没有人见过这个问题?任何人都可以对此做出解释吗?谢谢。
如果您尝试这个简单的代码:
public class GrandParent
{
public String f() {
return "grand parent";
}
}
public class Parent extends GrandParent
{
@Override public String f() {
return "parent";
}
}
public class Son extends Parent
{
@Override public String f() {
return "son";
}
}
public class Test
{
public static void main(String[] args) {
GrandParent p = new Son();
System.out.println(p.f());
}
}
你会看到打印出来的字符串是"son"
。你的代码有问题。
它甚至可以与父实例一起使用,请查看:
public class Parent {
public String getSomething()
{
return "parent";
}
}
public class Son extends Parent {
@Override
public String getSomething() {
return "son";
}
public static void main(String[] args) {
Son son = new Son();
System.out.println(son.getSomething());
Parent par = (Parent)son;
System.out.println(par.getSomething());
}
}
结果:
son
son