[英]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.