一、抽象类的概念1. 什么是抽象类使用abstract关键字修饰的类叫做抽象类。public abstract class 类名 { }抽象类是一种 “不完整的类”它可以定义普通属性和方法也可以定义抽象方法它不能直接创建对象必须靠子类继承并实现抽象方法。二、抽象方法1. 什么是抽象方法使用abstract修饰并且没有方法体的方法。public abstract void 方法名();注意抽象方法只有方法声明没有{ }方法体必须用abstract修饰。2. 抽象方法所在类必须是抽象类如果一个类里面有抽象方法那么这个类必须声明为抽象类。public abstract class Animal { // 抽象方法没有方法体 public abstract void eat(); }三、抽象类的特点特点说明有抽象方法的类必须是抽象类abstract class抽象类不一定全是抽象方法可以有普通方法、构造方法、成员变量抽象类不能直接new对象必须由子类继承子类必须实现父类所有抽象方法除非子类也是抽象类抽象类有构造方法供子类创建对象时调用四、抽象类的使用场景当多个子类拥有共同方法但每个子类的具体实现不同时可以把父类定义为抽象类。例如Animal类中的eat()不同动物吃的方式不同父类只规定 “要吃”不规定 “怎么吃”。public abstract class Animal { public abstract void eat(); }五、子类继承抽象类1. 普通子类必须实现全部抽象方法public class Dog extends Animal { Override public void eat() { System.out.println(狗啃骨头); } }2. 完整示例public abstract class Animal { private String name; public abstract void eat(); public String getName() { return name; } public void setName(String name) { this.name name; } }public class Cat extends Animal { Override public void eat() { System.out.println(猫吃鱼); } }public class Dog extends Animal { Override public void eat() { System.out.println(狗啃骨头); } }public class TestAnimal { public static void main(String[] args) { Dog dog new Dog(); dog.setName(小黑); dog.eat(); Cat cat new Cat(); cat.setName(小花); cat.eat(); } }输出狗啃骨头 猫吃鱼六、模板方法思想抽象类不仅能定义规范还能把固定流程写好把变化部分交给子类实现。public abstract class Person { public final void daily() { wakeUp(); eat(); work(); sleep(); } public abstract void work(); public void wakeUp() { System.out.println(起床); } public void eat() { System.out.println(吃饭); } public void sleep() { System.out.println(睡觉); } }public class Teacher extends Person { Override public void work() { System.out.println(老师讲课); } }public class Student extends Person { Override public void work() { System.out.println(学生学习); } }public class TestPerson { public static void main(String[] args) { Person t new Teacher(); t.daily(); Person s new Student(); s.daily(); } }七、抽象类常见问题1. 抽象类能不能有构造方法可以。 抽象类虽然不能直接new对象但子类创建对象时会调用父类构造方法。2. 抽象类能不能有普通方法可以。 抽象类中既可以有抽象方法也可以有普通方法。3. 没有抽象方法的类能不能声明为抽象类语法上可以但设计意义不大一般不推荐。4. 子类不实现抽象方法会怎样编译报错。 除非子类也声明为abstract。八、本章小结抽象类用abstract class修饰不能直接创建对象。抽象方法用abstract修饰没有方法体必须在抽象类中。子类规则普通子类必须实现父类所有抽象方法。使用意义定义规范提高扩展性符合模板方法设计思想。