摘要 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
我知道我们不能从抽象中实例化一个对象 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
.
假设 Circle 是 Shape 的唯一非抽象扩展,堆栈中的所有实例都是 Circle。通过扩展 Shape,您的 Class Circle 可以分配给 Circle 或 Shape 引用。 类 实现类似
的接口也是如此List × = new ArrayList();
使用接口列表及其实现 ArrayList