如何解决抽象类和 oop
我知道我们不能从抽象类实例化一个对象,但是在下面的代码中发生了什么:
while(!stack.empty())
{
Shape s1 = (Shape) stack.pop();
// more code here not important
}
这里的“Shape”是一个抽象类,那么这里发生了什么??? “ 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 原则之一调用 Polymorphism。您将实例转换为抽象类(或接口)Shape
,但实例本身应该是 Shape
的子类的任何具体类。
假设 Circle 是 Shape 的唯一非抽象扩展,堆栈中的所有实例都是 Circle。通过扩展 Shape,您的类 Circle 可以分配给 Circle 或 Shape 引用。 实现像
这样的接口的类也是如此List × = new ArrayList();
带有接口List及其实现ArrayList
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。