一、什么是抽象类?

        在父类中,有一些子类的共同方法,但这些方法在父类中没有具体的实现,这样的方法就称为抽象方法,在方法头中使用abstract修饰符表示。包含有抽象方法的类就称为抽象类。

        在UML图形记号中,抽象类和抽象方法的名字用斜体表示。

抽象类不能使用new操作符创建它的实例。抽象方法只有定义而没有实现。它的实现由子类提供。一个包含了抽象方法的类必须声明为抽象类。

        抽象类的构造方法定义为protected,因为它只能被子类使用。

 

   抽象类的几点说明:

(1)抽象方法不能包含在非抽象类中,也就是说,只要包含了抽象方法,这个类就一定要定义为抽象类。在抽象类扩展的非抽象子类中,必须实现所有的抽象方法。抽象方法是非静态的。

(2)可以定义一个不包含抽象方法的抽象类。

(3)抽象类不能使用new操作符来初始化。

(4)子类可以覆盖父类的方法并将它定义为abstract。

(5)即使子类的父类是具体的,这个子类也可以是抽象的。

(6)不能使用new操作符从一个抽象类创建一个实例,但是抽象类可以用作一种数据类型。

二、为什么要使用抽象类?

     举例:

     设计一个几何图形对象GeometricObject,设计一个方法比较两个几何面积是否相等。如果没有抽象方法getArea(),则无法实现equalArea()。

abstract class Geometric {

      public abstract double getArea() ;
       public boolean equalArea(Geometric o) {
                return  (this.getArea()==o.getArea()) ;
       }
}

class Circle extends Geometric {
      private double radius;
      public Circle(double radius) {
          this.radius = radius;
      }
        public  double getArea() {
            return Math.PI*radius*radius;
        }
}
class Rectangle extends Geometric {
      private double width,height;
      public Rectangle(double width,double height) {
          this.width = width;
          this.height = height;
      }
        public  double getArea() {
            return width*height;
        }
}

public class TestAreEqual {

    public static void main(String[] args) {
        Geometric o1 = new Circle(1);
        Geometric o2 = new Rectangle(1,Math.PI);
        System.out.println(o1.equalArea(o2));
    }
}

 

版权声明:本文为yinweifeng原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/yinweifeng/p/9837476.html