当前位置: 首页 > 面试题库 >

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

解晟
2023-03-14
问题内容

我有一个父类A,及其子B。两者都具有doSomething带有diff类型参数的方法。

A级

package Inheritance;

public class A {

    public void doSomething(Object str){
        System.out.println("Base impl:"+str);
    }
}

B级

package Inheritance;

public class B extends A{

    public void doSomething(String str){
        System.out.println("Child impl:"+str);
    }

    public static void main(String[] args) {

        A a = new B();
        a.doSomething("override");

    }
}

运行此命令时,将获得“ Base impl:override”作为输出!

a指向的对象B,而他经过的说法是String,所以不应该调用它BdoSomething(String str)方法是什么?


问题答案:

当您使用类型A的引用时,您只会看到为类A定义的方法。由于doSomethingB中不会覆盖doSomethingB(因为它具有不同的签名),因此不会调用它。

如果要使用类型B的引用,则两种方法都将可用,并且doSomething将选择B 类的方法,因为它具有更具体的参数(字符串与对象)。



 类似资料:
  • 输入是:1。硬币中一定数量货币的总重量,2。旧货币硬币的价值和相应重量。 目标是找到给定金额货币的最低可能货币价值。 我的方法是按货币的价值/重量比升序对硬币进行排序,然后贪婪地将第一枚硬币的重量尽可能多地匹配到总和中(跟踪它匹配的次数),然后匹配将第二枚硬币的重量尽可能多次地放入余数中,等等,对于所有硬币或直到余数为零(如果不是,情况是不可能的)。 法官说我的答案是错误的。你能给我一个关于算法错

  • 我用干净的架构在android项目上工作。 我有以下课程: 使用public dispose()方法从onNext实现中释放序列。 但我还是不明白使用它的好处。是否用于在销毁视图时从observable取消订阅,以便从转到并关闭发射器上的订阅?

  • 我有一个h2作为唯一的项目在一个容器div。我在容器上使用position:relative和h2上使用position:absolute/bottom:0使它与容器底部对齐。但是,我无法使h2文本与容器div的右侧对齐。 HTML: CSS: 链接:http://www.distributionaccess.com/new/stempath/about.html 我在h2上尝试了display:

  • 假设我有这个语法,用Antlr4编写: 我的思维过程是应该与相同;应该是。如果 上面的树似乎是正确的,它再次计算为。 但是当不使用空格时,antlr认为有两个INT-expr。如果 不应该跳过所有空格(使用规则),这意味着两个表达式的解析方式应该相同吗?

  • 无法编译以下内容: 特别是,使用javac编译时,错误将是: 但下面的汇编很好: 唯一的区别是我引入了一个额外的变量。请注意,我没有施法,所以没有语义变化。 有人能解释为什么需要这样做吗?

  • 这是一个使用合并排序的程序,从1到1000对1000个数字的列表进行排序。它显示原始列表,然后调用递归方法对其进行排序,然后显示。 代码中我不明白的是这两行: 合并排序(数字,低,中);//在方法中,它会说“这里” 合并排序(数字,中间1,高); 我是java的初学者,这与我所学的一切背道而驰,因为我无法理解如何在方法中调用方法。除非它是一个我怀疑的对象。有人能解释一下这两行代码的作用吗?