在Java教科书中创建抽象类的对象

时间:2019-05-09 03:38:16

标签: java inheritance polymorphism

以下内容来自一本教科书,我不知道它为什么起作用。在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);

1 个答案:

答案 0 :(得分:0)

请仔细阅读OOP的基本概念。

了解了多态性之后,您就会得到答案。

sol,sph,rec只是引用,而不是对象。

sph指向您所写的球体对象(实心sph = new Sphere(“ sphere”,4)),球体对象由新的Sphere(“ sphere”,4)和'='运算符点创建sph对球体对象的引用。因此,它调用了自己的方法并完成了计算。

类似的事情发生在记录中。