父类方法的不确定性问题当父类的某些方法需要声明但是又不确定如何实现时可以将其声明为抽象方法那么这个类就是抽象类抽象类abstract class是一种不能直接实例化的类它通常用作其他类的父类。抽象类允许你定义一些方法的共同行为而不需要在基类中实现这些方法的具体内容。具体的实现由子类提供。抽象类可以包含抽象方法和非抽象方法。1.抽象类的定义抽象类是通过abstract关键字声明的。一个类只有在包含抽象方法没有方法体的方法时才需要声明为抽象类。抽象类可以包含抽象方法没有方法体的方法必须在子类中实现。非抽象方法有方法体的方法可以被子类继承和使用也可以被子类覆盖重写。abstract class Animal { //有抽象方法类就要定义成抽象类 // 抽象方法没有方法体 abstract void sound(); // 非抽象方法有方法体 public void eat() { System.out.println(This animal is eating.); } } class Dog extends Animal { // 实现抽象方法 Override void sound() { System.out.println(Woof!); } } public class Test { public static void main(String[] args) { Animal myDog new Dog(); myDog.sound(); // 输出 Woof! myDog.eat(); // 输出 This animal is eating. } }Animal类是一个抽象类包含一个抽象方法sound()和一个非抽象方法eat()。Dog类继承自Animal并实现了抽象方法sound()。2.抽象类的使用场景共享代码的重用当多个类有相同的行为时可以将这些共同的行为放在抽象类中子类继承抽象类并实现特定的行为。约定子类实现行为通过抽象方法强制子类提供特定的实现。作为模板类抽象类的价值更多作用是在于设计是设计者设计好后让子类继承并实现抽象类。3.抽象类的细节1抽象类不能被实例化public class AbstractDetail01 { public static void main(String[] args){ new A();//抽象类不能被实例化这是会报错 abstract class A{ }2抽象类不一定要包含abstract方法。也就是说抽象类可以没有abstract方法但是有abstract方法一定要把类定义为抽象类。3abstract 只能修饰类和方法不能修饰属性和其它的4抽象类可以有任意成员【因为抽象类还是类】比如:非抽象方法、构造器、静态属性等等56如果一个类继承了抽象类则它必须实现抽象类的所有抽象方法除非它自己也声明为abstract类。从语法的层面来说。所谓实现方法就是有方法体方法体里面有什么内容不重要是空的都可以。7抽象方法不能使用 private不能被子类访问 、final 表示方法不能被重写不能在子类中修改和static表示方法是类的成员而不是实例的成员也就是说它不依赖于类的实例就可以调用 来修饰因为这些关键字都是和重写抽象方法的本意相违背的4.抽象类最佳应用场景-模板设计模式