为什么要调用超类方法?

瑟鲁马莱·帕塔萨拉西(Thirumalai Parthasarathi)
class One { 
  public void doThing(One o) {System.out.println("One");}
}

class Two extends One{
  public void doThing(Two t) {System.out.println("Two");}
}

public class Ugly {
  public static void main(String[] args) {
    Two t = new Two();
    One o = t;
    o.doThing(new Two());
  }
}

结果:一个

class One { 
  public void doThing(One o) {System.out.println("One");}
}

class Two extends One{
  public void doThing(Two t) {System.out.println("Two");}
}

public class Ugly {
  public static void main(String[] args) {
    Two t = new Two();
    One o = t;
    t.doThing(new Two());
  }
}

结果:两个

我知道在运行时,即使对象引用是超类类型,也将知道实际的对象类型并调用实际的对象方法。但是,如果是这样,doThing(Two t)则应在运行时调用方法,而应调用超类方法doThing(One o)如果有人解释我会很高兴

在第二段代码中,它显示“ Two”。

问题:当从超类引用调用doThing(One o)时,它正在调用从子类引用调用时,它正在调用doThing(Two o)

注意:我知道我超载而不是骑车。我已经对我的问题进行了编辑,以使其更加清晰。

瑟鲁马莱·帕塔萨拉西(Thirumalai Parthasarathi)

在编译时,编译器会在类中搜索该One方法,doThing(Two t)但是由于没有带有该签名的方法,因此它开始扩大搜索范围和查找范围doThing(One o)然后,它保存带有描述符的二进制文件one parameter whose type is One : void在运行时,由于调用方法的对象是类型Two,因此在类中Two它将查找与描述符匹配的方法,而不会在将二进制doThing对象Two视为描述符的情况下搜索接受对象的方法因此它将调用链接到方法doThing(One o)

Java规范对此有很大帮助。是链接

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

为什么要调用基类方法?

来自分类Dev

为什么要覆盖超类的方法,而不是给它一个不同的名称?

来自分类Dev

为什么我的超类在Swift中调用子类的方法而不是它的方法?

来自分类Dev

为什么要调用?

来自分类Dev

在这种情况下,为什么要调用父类方法而不是子类?

来自分类Dev

从超类调用方法

来自分类Dev

从超类调用方法

来自分类Dev

为什么需要在构造函数中调用超类?

来自分类常见问题

覆盖方法时调用超类的方法的目的是什么?

来自分类Dev

从超类的超类调用方法

来自分类Dev

为什么要调用finish()

来自分类Dev

当没有显式定义的超类时,为什么要在超类中使用超调用

来自分类Dev

为什么基类调用子类的方法?

来自分类Dev

当对象是子类类型时,为什么我不能从超类调用子类中的公共方法?

来自分类Dev

为什么要调用内部函数而不是方法?

来自分类Dev

为什么addDomain方法会影响域的超类

来自分类Dev

为什么addDomain方法会影响域的超类

来自分类Dev

为什么代码执行超类'方法而不是子类'?

来自分类Dev

模拟超类方法调用

来自分类Dev

调用超类方法operator ==

来自分类Dev

Clojure:调用超类方法

来自分类Dev

为什么要重载方法?

来自分类Dev

我在子类中覆盖了一个属性的setter,但是当我在超类的init方法中调用它时,为什么子类的方法响应?

来自分类Dev

为什么说new House(“ x”)时调用超类构造函数Building()?

来自分类Dev

为什么默认情况下会调用超类指定的初始化程序?

来自分类Dev

为什么要调用doGET而不是doPOST?

来自分类Dev

为什么要调用python装饰函数?

来自分类Dev

为什么要调用构造函数?

来自分类Dev

为什么要调用此函数?

Related 相关文章

  1. 1

    为什么要调用基类方法?

  2. 2

    为什么要覆盖超类的方法,而不是给它一个不同的名称?

  3. 3

    为什么我的超类在Swift中调用子类的方法而不是它的方法?

  4. 4

    为什么要调用?

  5. 5

    在这种情况下,为什么要调用父类方法而不是子类?

  6. 6

    从超类调用方法

  7. 7

    从超类调用方法

  8. 8

    为什么需要在构造函数中调用超类?

  9. 9

    覆盖方法时调用超类的方法的目的是什么?

  10. 10

    从超类的超类调用方法

  11. 11

    为什么要调用finish()

  12. 12

    当没有显式定义的超类时,为什么要在超类中使用超调用

  13. 13

    为什么基类调用子类的方法?

  14. 14

    当对象是子类类型时,为什么我不能从超类调用子类中的公共方法?

  15. 15

    为什么要调用内部函数而不是方法?

  16. 16

    为什么addDomain方法会影响域的超类

  17. 17

    为什么addDomain方法会影响域的超类

  18. 18

    为什么代码执行超类'方法而不是子类'?

  19. 19

    模拟超类方法调用

  20. 20

    调用超类方法operator ==

  21. 21

    Clojure:调用超类方法

  22. 22

    为什么要重载方法?

  23. 23

    我在子类中覆盖了一个属性的setter,但是当我在超类的init方法中调用它时,为什么子类的方法响应?

  24. 24

    为什么说new House(“ x”)时调用超类构造函数Building()?

  25. 25

    为什么默认情况下会调用超类指定的初始化程序?

  26. 26

    为什么要调用doGET而不是doPOST?

  27. 27

    为什么要调用python装饰函数?

  28. 28

    为什么要调用构造函数?

  29. 29

    为什么要调用此函数?

热门标签

归档