繁体   English   中英

抽象类和 oop

[英]abstract class and oop

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

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

这里的“Shape”是一个抽象类,那么这里发生了什么??? “形状 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 原则之一,称为 多态性 您将实例转换为抽象类(或接口) Shape ,但实例本身应该是Shape子类的任何具体类。

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

List × = new ArrayList();

带有接口 List 及其实现 ArrayList

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM