java 我们可以使用保存子类对象的超类的引用变量访问子类的成员吗?[副本]

ajsxfq5m  于 2023-10-14  发布在  Java
关注(0)|答案(1)|浏览(110)

此问题已在此处有答案

Java overloading method selection(2个答案)
昨天关门了。
如果不是,那么对于下面的程序,子类的乘法(方法)是如何访问的,因为我使用了超类Calculation的引用变量,它保存了子类My_Calculation的对象。* 下面程序的输出是:*给定数的和:30给定数之间的差:10子类中给定数的乘积是:200

class Calculation {
int z;

public void addition(int x, int y) {
   z = x + y;
   System.out.println("The sum of the given numbers:"+z);
}

public void Subtraction(int x, int y) {
   z = x - y;
   System.out.println("The difference between the given numbers:"+z);
}
public void multiplication(int x, int y) {
   z = x * y;
   System.out.println("The product of the given numbers in super class is :"+z);
}
}

public class My_Calculation extends Calculation {
public void multiplication(int x, int y) {
   z = x * y;
   System.out.println("The product of the given numbers in sub class is:"+z);
}

public static void main(String args[]) {
   int a = 20, b = 10;
   Calculation demo = new My_Calculation();
   demo.addition(a, b);
   demo.Subtraction(a, b);
   demo.multiplication(a, b);
}
}

我期待错误,因为我们只能使用超类的引用访问超类的成员。

72qzrwbm

72qzrwbm1#

在java中,一个子类和它的超类有相同的方法被称为方法覆盖。当通过超类引用调用重写的方法时,Java确定要执行该方法的哪个版本(超类/子类)。被调用的方法由被引用的对象的类型决定,而不是由引用变量的类型决定。这就是Java中的多态性。
在代码中,调用子类的multiplication方法,因为对象的真实的类型是 My_Calculation

相关问题