spa*_*key 4 java abstract-class
我正在使用Java:The Complete Reference这本书学习Java .目前我正在研究抽象类的主题.
请注意:stackoverflow上有类似的问题.我搜查了他们,但我无法理解这个概念.
如果我运行以下程序,它会产生正确的输出,但我不明白这个概念.
这里对Abstract类的引用变量有什么需求.我可以在没有抽象类的引用变量的情况下获得输出.
首先,我运行以下程序并获得所需的输出.
abstract class Figure {
double dim1;
double dim2;
Figure(double a, double b) {
dim1 = a;
dim2 = b;
}
// area is now an an abstract method
abstract double area();
}
class Rectangle extends Figure {
Rectangle(double a, double b) {
super(a, b);
}
// override area for rectangle
double area() {
System.out.println("Inside Area for Rectangle.");
return dim1 * dim2;
}
}
class Triangle extends Figure {
Triangle(double a, double b) {
super(a, b);
}
// override area for right triangle
double area() {
System.out.println("Inside Area for Triangle.");
return dim1 * dim2 / 2;
}
}
class AbstractAreas {
public static void main(String args[]) {
Rectangle r = new Rectangle(9, 5);
Triangle t = new Triangle(10, 8);
Figure figref;
figref = r;
System.out.println("Area is " + figref.area());
figref = t;
System.out.println("Area is " + figref.area());
}
}
Run Code Online (Sandbox Code Playgroud)
我尝试了下面的代码,而没有创建/使用抽象类引用.
class AbstractAreas {
public static void main(String args[]) {
Rectangle r = new Rectangle(9, 5);
Triangle t = new Triangle(10, 8);
// Figure figref;
// figref = r;
System.out.println("Area is " + r.area());
// figref = t;
System.out.println("Area is " + t.area());
}
}
Run Code Online (Sandbox Code Playgroud)
它也提供了与第一个程序相同的输出.
任何人都可以解释使用抽象类引用调用"区域方法"的需要.
它只是作为一个演示,即使您将变量声明为抽象类型,您也可以为其分配一个具体子类的实例,并从子类中获取重写行为.
实际使用示例是,如果您需要它们的集合:
List<Figure> figureList = new ArrayList<Figure>();
figureList.add(new Rectangle(9, 5));
figureList.add(new Triangle(10, 8));
for (Figure f : figureList) {
System.out.println(f.area());
}
Run Code Online (Sandbox Code Playgroud)
或者,如果要将任何子类传递Figure
给使用以下方法的方法area()
:
public void printArea(Figure f) {
System.out.println("Area is: " + f.area());
}
...
myObject.printArea(new Rectangle(9, 5));
myObject.printArea(new Triangle(10, 8));
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
1740 次 |
最近记录: |