每个子类都可以覆写父类的方法
如果父类的方法没有实际意义,能否去掉方法的执行语句?子类会报编译错误
如果去掉父类的方法,就失去了多态的特性
可以把父类的方法声明为抽象方法。
如果一个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;}@Overridepublic double area() {return width * height;}}
Circle.java
public class Circle extends Shape{private double radius;public Circle(double radius){this.radius = radius;}@Overridepublic 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());}}
总结:
抽象方法定义了子类必须实现的接口规范定义了抽象方法的类就是抽象类从抽象类继承的子类必须实现抽象方法如果不实现抽象方法,该子类仍是一个抽象类