不能实例化 ,必须被继承
抽象类的出现类似于接口, 都是为了制定一个规制, 让子类去实现这些规制,而不是直接操作抽象类本身
抽象类的格式:
访问修饰符 abstract class 抽象类名{}
抽象类的特点:
-
抽象类使用abstract关键字来定义
-
抽象类中可以有
实例成员 (实例方法必须实现,即必须有方法体),可以有
抽象成员(抽象方法不能实现,即不能有方法体, 必须等待子类继承后,在子类重写override) , 也可以有
静态成员(静态方法必须实现,即必须有方法体),还能有
虚方法(必须实现,即必须有方法体)
-
抽象类不能实例化 , 抽象类被定义之后 ,一般不直接使用它, 而是使用它的子类
-
抽象类必须被继承 , 才有存在的意义
-
继承抽象类的子类必须实现抽象类中给所有的抽象方法
抽象类的应用场景:
-
定义统一的接口和行为,提供通用的方法,避免重复代码。
-
强制子类实现某些行为,保证接口的一致性。
-
共享通用功能,但不暴露给具体的类。
-
实现多态,通过抽象类来管理不同类型的对象。
-
避免父类实例化,将父类作为一种模板类使用。
注意:
-
override只能重写虚方法, 不能重写实例和静态方法
访问修饰符 override 返回值类型 虚方法名(){ base.虚方法名(); // base基类, 调用基类中的虚方法,即保留原来的业务逻辑 //....重写虚方法的内容 }
-
new 可以将实例方法和静态方法隐藏
隐藏一般想使用原来的方法名 ,但是不想使用原来的业务逻辑
访问修饰符 new 返回值类型 实例方法名(){ //....重写实例方法的内容 }
访问修饰符 static new 返回值类型 静态方法名(){ //....重写静态方法的内容 }