以下内容来自一本教科书,我不知道它为什么起作用。在main方法中,创建了一个抽象类的多个对象,这是不可能的。
这本书给出的解释是:“这是一个多态的例子:在运行时选择正确的音量值。”
如果无法在有问题的对象上调用volume()方法,它将如何选择正确的值?
是否sol,sph和rec不是Solid类?如果是这样,为什么不呢? ClassA x =新的ClassB();当ClassB扩展ClassA时,创建ClassA对象。
public abstract class Solid {
private String name;
public Solid(String solidName) {name = solidName;}
public String getName() {return name;}
public abstract double volume();
}
public class Sphere extends Solid {
private double radius;
public Sphere(String sphereName, double sphereRadius) {
super(sphereName);
radius = sphereRadius;
}
public double volume() {
return (4.0/3.0) * Math.PI * radius * radius * radius;
}
public class RectangularPrism extends Solid {
private double length;
private double width;
private double height;
public RectangularPrism(String prismName, double l, double w, double h) {
super(prismName);
length = l;
width = w;
height = h;
}
public double volume() {
return length * width * height;
}
public class SolidMain {
public static void printVolume(Solid s) {
System.out.println("Volume = " + s.volume() + " cubic units.");
}
public static void main(String[] args) {
Solid sol;
Solid sph = new Sphere("sphere", 4); //is sph an object of type Solid?
Solid rec = new RectangularPrism("box", 3, 6, 9);
int flipCoin = (int) (Math.random()*2); //random 0 or 1
if (flipcoin == 0) {
sol = sph;
} else {
sol = rec;
} printVolume(sol);
答案 0 :(得分:0)
请仔细阅读OOP的基本概念。
了解了多态性之后,您就会得到答案。
sol,sph,rec只是引用,而不是对象。
sph指向您所写的球体对象(实心sph = new Sphere(“ sphere”,4)),球体对象由新的Sphere(“ sphere”,4)和'='运算符点创建sph对球体对象的引用。因此,它调用了自己的方法并完成了计算。
类似的事情发生在记录中。