微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

抽象类和 oop

如何解决抽象类和 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 举报,一经查实,本站将立刻删除。