对Java继承规则感到困惑

对Java继承规则感到困惑,java,inheritance,polymorphism,Java,Inheritance,Polymorphism,在下面的代码中,我有以下问题: 我不懂这个词的语义 One hybrid=new Two() 我的理解是,Java在这种情况下执行所谓的向上转换。 即使hybrid被声明为One的实例,编译器也将其转换为Two实例 这是正确的吗 因此,在#3,它调用Two的方法foo。到目前为止还不错 至少有5件事对我来说变得神秘起来: 究竟为什么编译器调用One的bar方法而不是Two?我错过了什么 谢谢 马塞尔 class One { public One() {} public String fo

在下面的代码中,我有以下问题:

我不懂这个词的语义

One hybrid=new Two()

我的理解是,Java在这种情况下执行所谓的向上转换。 即使
hybrid
被声明为
One
的实例,编译器也将其转换为
Two
实例

这是正确的吗

因此,在#3,它调用
Two
的方法
foo
。到目前为止还不错

至少有5件事对我来说变得神秘起来:

究竟为什么编译器调用
One
bar
方法而不是
Two
?我错过了什么

谢谢

马塞尔

class One {
  public One() {}
  public String foo() {return "One-foo";}
  public String bar(One o) {return "One-bar " + o.foo();}
};

class Two extends One {
  public Two() {}
  public String foo() {return "Two-foo";}
  public String bar(Two t) {return "Two-bar " + t.foo();}
};

class Main {
  public static void main(String[] args) {
    One one = new One();
    Two two = new Two();
    One hybrid = new Two();

    System.out.println(one.foo());        // #1 One-foo
    System.out.println(two.foo());        // #2 Two-foo
    System.out.println(hybrid.foo());     // #3 Two-foo

    System.out.println(one.bar(two));     // #4 One-bar Two-foo
    System.out.println(hybrid.bar(two));  // #5 One-bar Two-foo
    System.out.println(two.bar(hybrid));  // #6 One-bar Two-foo
  }
}
与下面的输出相比,我希望得到以下输出:

One-foo
Two-foo
Two-foo
One-bar Two-foo
Two-bar Two-foo
Two-bar Two-foo
实际产出:

One-foo
Two-foo
Two-foo
One-bar Two-foo
One-bar Two-foo
One-bar Two-foo

字符串条(两个t)
不会覆盖
字符串条(一个o)

字符串条(两个t)
不会覆盖
字符串条(一个o)

尝试使用
@覆盖
注释。问题是
字符串条(两个t)
不会覆盖
字符串条(一个o)
,它只是将其隐藏起来。有您想要的答案,特别是:“重写方法”。如果子类中的参数类型不相同,则该方法将被重载而不是重写。您应该始终使用@Override注释以确保不会意外发生这种情况尝试使用
@Override
注释。问题是
条(两个t)
没有覆盖
条(一个o)
,它只是将其阴影化。有您想要的答案,特别是:“重写方法”。如果子类中的参数类型不相同,则该方法将被重载而不是重写。您应该始终使用@Override注释以确保不会意外发生这种情况。类1和类2中的foo()不是这样吗?为什么在案例#3中,两个的foo方法被称为@MarcelSchaible,因为
foo()
没有参数
bar()
有一个参数,它的类型在两个类中都不相同。ok,这很有意义。现在它在我的脑海里发出咔哒声;-)类1和类2中的foo()不是同样的情况吗?为什么在案例#3中,两个的foo方法被称为@MarcelSchaible,因为
foo()
没有参数
bar()
有一个参数,它的类型在两个类中都不相同。ok,这很有意义。现在它在我的脑海里发出咔哒声;-)