抽象类存在的意义是为了被子类继承,否则抽象类将毫无意义,抽象类体现的是模板思想,模板是通用的东西。

抽象类:包含抽象方法的类。

abstract class 类名字 {

}

 

抽象方法:没有方法体的方法

修饰符 abstract 返回值类型 方法名 (参数列表);

 

抽象类的使用

继承抽象类的子类必须重写父类所有的抽象方法。否则,该子类也必须声明为抽象类。

此时的方法重写,是子类对父类抽象方法的完成实现,我们将这种方法重写的操作,也叫做实现方法。

 

抽象类的特征

有得:抽象类得到了拥有抽象方法的能力

有失:抽象类失去了创建对象的能力

 

抽象类的注意事项

  • 抽象类不能创建对象。
  • 抽象类中,可以有构造器,是供子类创建对象时,初始化父类成员使用的。
  • 抽象类中,不一定包含抽象方法,但是有抽象方法的类必定是抽象类。
  • 抽象类的子类,必须重写抽象父类中所有的抽象方法,否则子类也必须定义成抽象类。
  • 抽象类存在的意义是为了被子类继承,抽象类体现的是模板思想。

 

模板设计模式:司机开车

  1. 定义开车类的模版:在父类中调用子类重写后的方法
  2. 定义一些固定的内容(开门,点火,刹车,熄火)
  3. 不用的内容定义抽象方法(开车姿势不同)

Driver.java

 1 public abstract class Driver {
 2     //定义开车的方法
 3     public void drive(){
 4         System.out.println("开门");
 5         System.out.println("点火");
 6         ziShi();//调用的是每个子类重写后的方法
 7         System.out.println("刹车");
 8         System.out.println("熄火");
 9     }
10 
11     //新司机和老司机开车的方式不同,定义为抽象方法
12     public abstract void ziShi();
13 }

 

 

NewDriver.java

//定义新司机类,是司机的一种,继承司机类
public class NewDriver extends Driver {
    @Override
    public void ziShi() {
        System.out.println("新司机开车姿势:双手紧握方向盘!");
    }
}

 

 

OlederDriver.java

//定义老司机类,是司机的一种,继承司机类
public class OldDriver extends  Driver{
    @Override
    public void ziShi() {
        System.out.println("老司机开车姿势:右手握方向盘左手抽烟!");
    }
}

 

 

测试类Demo01Driver.java

public class Demo01Driver {
    public static void main(String[] args) {
        //创建新司机对象
        NewDriver nd = new NewDriver();
        nd.drive();

        System.out.println("-----------------");

        //创建老司机对象
        OldDriver od = new OldDriver();
        od.drive();
    }
}

 

 

运行结果

 

posted on 2020-04-12 19:39  ⊱风之悟⊰  阅读(98)  评论(0编辑  收藏  举报

Live2D