廖雪峰Java2面向对象编程-4抽象类和接口-1抽象类

每个子类都可以覆写父类的方法
如果父类的方法没有实际意义,能否去掉方法的执行语句?子类会报编译错误
如果去掉父类的方法,就失去了多态的特性
可以把父类的方法声明为抽象方法。
如果一个class定义了方法,但没有具体执行代码,这个方法就是抽象方法:

  • 抽象方法用abstract修饰
  • 抽象方法没有任何执行语句
  • 因为无法执行抽象方法,因此这个类也必须声明为抽象类abstract class
  • 无法实例化一个抽象类。如果子类不是抽象类,依旧可以被实例化。

抽象类作用:

  • 抽象类用于被继承
  • 抽象类可以强迫子类实现其定义的抽象方法,否则编译错误
  • 抽象方法实际上相当于定义了规范。

面向抽象编程的本质:

  • 上层代码只定义规范 abstract class Person
  • 不需要子类就可以实现业务逻辑(正常编译)
  • 具体的业务逻辑由不同的子类实现,调用者并不关心
    Shape.java
public abstract class Shape {
    //抽象方法,用于计算面积
    public abstract double area();
}

Rect.java

public class Rect extends Shape{
    private final double width;
    private final double height;
    public Rect(double width, double height){
        this.height = height;
        this.width = width;
    }
    @Override
    public double area() {
        return width * height;
    }
}

Circle.java

public class Circle extends Shape{
    private double radius;
    public Circle(double radius){
        this.radius = radius;
    }
    @Override
    public double area() {
        return Math.PI * radius * radius;
    }
}

Hello.java

public class Hello {
    public static void main(String[] args){
        Shape s1 = new Rect(200,100);
        Shape s2 = new Circle(60);
        System.out.println(s1.area());
        System.out.println(s2.area());
    }
}

总结:

  • 抽象方法定义了子类必须实现的接口规范
  • 定义了抽象方法的类就是抽象类
  • 从抽象类继承的子类必须实现抽象方法
  • 如果不实现抽象方法,该子类仍是一个抽象类
posted on 2019-01-15 22:13  singleSpace  阅读(201)  评论(0编辑  收藏  举报