Java 通过重写实现重载

Java 通过重写实现重载,java,Java,为什么即使将整型参数传递给方法“p”,这里也不会发生重载 由于变量a被声明为B,因此只有B中声明的p方法可见并被选择。没有压倒一切的因素 如有疑问,请在您喜爱的IDE中使用@Override注释您的方法。如果IDE没有覆盖任何内容,它就不会让它编译 编辑后,现在有一个覆盖的方法,形式为A#p(double)。当你调用 a.p(10); a.p(10.0); 将调用B类上可见的方法p。通过多态性,并且由于变量a是运行时类型a,因此将调用a中声明的重写方法 请注意,中的int参数 a.p(10

为什么即使将整型参数传递给方法“p”,这里也不会发生重载


由于变量
a
被声明为
B
,因此只有
B
中声明的
p
方法可见并被选择。没有压倒一切的因素

如有疑问,请在您喜爱的IDE中使用
@Override
注释您的方法。如果IDE没有覆盖任何内容,它就不会让它编译


编辑后,现在有一个覆盖的方法,形式为
A#p(double)
。当你调用

a.p(10);
a.p(10.0);
将调用
B
类上可见的方法
p
。通过多态性,并且由于变量
a
是运行时类型
a
,因此将调用
a
中声明的重写方法


请注意,中的
int
参数

a.p(10);

通过.

变成
双精度
,因为您是通过对a-
B的引用调用事物的。它只有一个方法。

它总是在
B
中调用该方法,因为:

  • 变量的类型为
    B
    ,因此编译器只知道
    double
    方法
  • A
    中的方法不会覆盖
    B
    的方法,因为参数类型
    int
    不同于
    B
    double
    ——它对调用代码不可见

A
extend
B
非常混乱。几乎世界上每一个重写示例都使
A
成为父类。那么对象A在这里有什么用途呢?当特定于对象(此处为“A”)的方法执行时?@user3126466:在这种情况下,没有任何用处。您的示例中没有重写的方法。现在我在类A中编辑并添加了重写的方法。因此这里缺少重载。。
a.p(10);