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

java – 为什么它总是调用父类方法“doTest(double d)”?

发布时间:2020-12-15 02:18:23 所属栏目:Java 来源:网络整理
导读:参见英文答案 Polymorphism in Overloaded and Overridden Methods????????????????????????????????????4个 class PolymorphisomTest { class Base { public void doTest(double d) { System.out.println("From Base"); } } class DerivedBase extends Base
参见英文答案 > Polymorphism in Overloaded and Overridden Methods????????????????????????????????????4个

class PolymorphisomTest {

    class Base {
        public void doTest(double d) {
            System.out.println("From Base");
        }
    }

    class DerivedBase extends Base {

        public void doTest(int d) {
            System.out.println("From Derived Base");
        }
    }

    public void use(Base  base) {
        base.doTest(3);
    }
    public void run() {
        use(new Base());
        use(new DerivedBase ());
    }
    public static void main(String []cmd) {
        new PolymorphisomTest ().run();
    }
}

这里是来自父类的doTest(double d)和来自子类的doTest(int d),但是当我调用base.doTest(3)时,它总是调用父类方法,即使我的对象引用是不同的.这背后的原因是什么?

解决方法

doTest(double d)是一种与void doTest(int d)完全不同的方法,因为它们具有不同的参数列表.实际上根本没有任何多态性; DerivedBase声明了一个新方法,而不是重载Base.doTest.就好像你这样做了:

class Base {
    public void doTest(double d) {
        System.out.println("From Base");
    }
}

class DerivedBase extends Base {
    public void doSomethingElse(int d) {
        System.out.println("From Derived Base");
    }
}

更改参数的类型会更改方法签名,并使其成为新方法,而不是覆盖父类的方法.

当你调用base.doTest(3)时,编译器将调用doTest(double),因为这是Base类与参数匹配的唯一方法.因为该方法没有被任何东西覆盖,所以会调用Base.doTest.

(编辑:李大同)

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

    推荐文章
      热点阅读