Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/397.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在本例中,为什么java更喜欢父类?_Java - Fatal编程技术网

在本例中,为什么java更喜欢父类?

在本例中,为什么java更喜欢父类?,java,Java,因此,在课堂上,我们会过度加载和删除,但出于某种原因,我的教授无法解释为什么当我们有两个类(a和b;以及b扩展到a)时,调用一个方法时,它会优先选择父类中的方法,即使参数满足子类的参数。但是java使用父级 class B extends A { public int m(int x) { return 20; } } class A { public int m(double x) { return 10; } } public class Tester {

因此,在课堂上,我们会过度加载和删除,但出于某种原因,我的教授无法解释为什么当我们有两个类(a和b;以及b扩展到a)时,调用一个方法时,它会优先选择父类中的方法,即使参数满足子类的参数。但是java使用父级

class B extends A {
  public int m(int x) {
    return 20;
  }
}

class A {
  public int m(double x) {
    return 10;
  }
}

public class Tester {
  public static void main(String[] args) {
    A x = new B();
    System.out.println(x.m(5));
  }
}

输出:10

它们不是相同的方法。它们有不同的参数类型。将
@Override
添加到
a
。您确定输出为10吗?@JoopEggen,这没关系。仅用于编译器的注释!链接复制的tldr:由于两个
m
方法不相关,编译器在编译时只知道
a
的方法——也就是说,它只知道
m(double)
。因此,它将方法解析为该调用,并且在运行时没有考虑到存在一个更适合的方法这一事实,因为该更适合的方法不是重载的
m(double)
(因为int不是double的子类型)。