摘要 class 和 oop

abstract class and oop

我知道我们不能从抽象中实例化一个对象 class 但是下面的代码中发生了什么:

while(!stack.empty())
     {
         Shape s1 = (Shape) stack.pop();
         // more code here not important
     }

这里的“形”是抽象的class,那这里是怎么回事??? “形状s1”他是在做东西还是在做什么??

完整代码:

public abstract class Shape
{
    protected double area;
    public abstract double getArea(); 
}

public class Circle extends Shape
{
     double radius;
     public Circle(double r)
     {
         radius = r;
     }
     public double getArea()
     {
         area = 3.14*(radius*radius);
         return area;
     }
}

注意:他正在从 Circle 类型中压入堆栈对象

这是 OOP 原则调用之一 Polymorphism。您将实例转换为抽象 class(或接口)Shape,但实例本身应该是 Shape.

的子项的任何具体 class

假设 Circle 是 Shape 的唯一非抽象扩展,堆栈中的所有实例都是 Circle。通过扩展 Shape,您的 Class Circle 可以分配给 Circle 或 Shape 引用。 类 实现类似

的接口也是如此
List × = new ArrayList();

使用接口列表及其实现 ArrayList