对象的区域 - 抽象类 - Java

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)

它也提供了与第一个程序相同的输出.

任何人都可以解释使用抽象类引用调用"区域方法"的需要.

Bri*_*ach 6

它只是作为一个演示,即使您将变量声明为抽象类型,您也可以为其分配一个具体子类的实例,并从子类中获取重写行为.

实际使用示例是,如果您需要它们的集合:

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)

  • 或者使用`area()`在`Figure`上做某事的方法 (2认同)