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. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |