【发布时间】:2022-01-11 00:49:02
【问题描述】:
编程新手...只是试图理解方法覆盖。 在下面的代码中,来自子类的对象覆盖了父类方法,但仍然使用子类对象我无法运行被覆盖的方法 (m())。 我设置了不同的返回类型——父类中的浮点数和子类中的双精度,如果特定方法没有被覆盖,那么子类也从接口 u 实现相同的方法并且仍然没有运行被覆盖的方法..
class Parent {
public float m(float m){
System.out.println(" parent class with float return");
return m;
}}
class Child extends Parent implements u {
@Override
public double m(double y) { /*method name same - Parent class & interface
different return type */
System.out.println(" child class with double");
return y;
}
public static void main(String[] args) {
Child child = new Child();
child.m(10);/*child object running parent method*/
Parent g = new Child();
g.m(10);
}
}
interface u {double m(double y);}
【问题讨论】:
-
方法名和参数列表形成一个唯一标识符。所以
m(float)不同于m(double)。 Java 还采用10并自动应用对话,在这种情况下支持float而不是double。您可以使用child.m(10d);转换值,这将导致调用Childsm方法 -
谢谢,我现在明白了..它就像最高的是 int-long-float-double..
-
谢谢,我现在明白了..它就像最高的是 int-long-float-double...你能推荐一些好书来理解 Java 编译器 JVM 规则
-
你可以试试看java jvm specifications
标签: java methods interface overriding