加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – 为什么叫super class方法?

发布时间:2020-12-14 05:59:02 所属栏目:Java 来源:网络整理
导读: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
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(一o)
当从子类引用调用它调用doThing(两个o)

注意:我知道我已经超载,而不是骑马.我已经编辑了我的问题,以便更清楚.

解决方法

方法doThing()在One和Two中具有不同的方法签名.
One.doThing(One one)
Two.doThing(Two two)

既然,签名不匹配,Two.doThing(Two)不会覆盖One.doThing(One),因为o是类型One,所以调用One.doThing().

还要注意的是,One.doThing(One)可以将Two作为One.doThing(One)的参数,作为Two扩展One的一个参数.

Basically,“@nachokk – You are Overloading,not Overriding”

在第一种情况下,当你这样做

Two t = new Two();
One o = t;
o.doThing(new Two());

所以,o是One和Two.doThing(Two)的一个实例,不可用于o因此调用One.doThing(One)

在第二种情况下,

Two t = new Two();
One o = t;
t.doThing(new Two());

t是Two的一个实例,因此称为Two.doThing(Two).

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读