l 抽象类和抽象方法
抽象类和抽象方法:使用abstract关键字修饰的类和方法就成了抽象类和抽象方法,格式与普通类和方法类似。
抽象类的特性:
·有抽象类就要有继承的子类去实现抽象类中的抽象方法。
·抽象类中可以定义普通类中定义的所有成员,并且只有在抽象类中才能定义抽象方法。
·抽象类中不能new对象,抽象类中的对象是给子类调用的。
·在抽象类中定义的方法,在其普通子类中必须实现所有抽象父类中定义的所有抽象方法,否则这个子类也要申明成抽象类。
抽象方法的特性:
·抽象方法只有方法声明没有方法实现
·抽象方法是准备在子类中实现的,它只是一个模板。
没有抽象属性和抽象变量一说。
注意:
abstract与final不能同时修饰一个方法或类。因为final修饰的方法不能被重写而abstract修饰的方法需要在子类实现(重写);final修饰的类不能有继承,而abstract修饰的类是抽象类必须要有子类,因此这两个修饰符冲突,不能一起使用。
abstract与static不能同时修饰一个方法。static修饰方法属于类方法,可以被“类.方法”类直接调用,而abstract修饰的方法是抽象方法,没有方法体,是需要在子类中重写的方法。因此static不能与abstract同时修饰一个方法。
abstract与private不能同时修饰一个方法。private修饰的方法只能在当前类被调用,而abstract修饰的抽象类必须要在子类中被重写才有意义,如果父类中方法权限是private那么这个方法对子类是透明的。因此private不能同时修饰一个方法。
·抽象类的作用:
抽象类就是一个模板,也叫模板设计模式。父类提供了多个子类的通用方法,并且把一个或多个方法留给子类实现,这就是模板模式。
例子:抽象类
public abstract class SpeedMeter { private double trunRate; public abstract double getRadius(); public void setTruneRate(double trunRate) { this.trunRate = trunRate; } //计算车速的通用算法,周长 x 转速 = 速度 public double getSpeed() { return java.lang.Math.PI * 2 * trunRate * this.getRadius(); } } public class Car extends SpeedMeter { public double getRadius() { return 5.0; } public static void main(String[] args) { Car ca = new Car(); ca.setTruneRate(10.0); System.out.println(ca.getSpeed()); } }
来源:https://www.cnblogs.com/keanuyaoo/p/3283567.html