抽象类与抽象方法
抽象类
使用 abstract 修饰类 (public abstract class 类名)
效果:这个类不可以new
抽象方法
abstract 关键字也可以用于方法——抽象方法
- 抽象方法没有方法体
- 抽象方法必须在抽象类里
- 抽象方法必须在子类中被实现,除非子类是抽象类
语法:
[访问修饰符] abstract class类名{
//只有方法声明无具体实现
[访问修饰符] abstract <返回类型> <方法名> ([参数列表]);
//有抽象的类必然是抽象类
//在抽象类中的方法并不一定都是抽象方法
}
抽象方法:
抽象类中才可以写抽象方法
抽象类的优势
- 提高可用性
- 抽象类可以看作是类的一个模板,定义了子类的行为,可以为子类提供默认实现,无需子类中重复实现这些方法
- 代码松耦合,更易于维护
- 子类可以分别为实现抽象类父类中的抽象方法,将方法定义和方法实现的分离
- 方便实现多态
- 抽象类作为继承关系下的抽象层,不能被实例化,通常定义抽象类类类型变量,其具体引用是实现抽象类的子类对象
抽象类与抽象方法
-
抽象方法只有方法声明,没有方法实现
-
有抽象方法的类必须声明为抽象类
-
子类必须重写所有的抽象方法才能实例化;否则,子类也必须声明成抽象类
-
抽象类中可以没有、有一个或多个抽象方法,甚至可以定义全部都是抽象方法
-
抽象类可以有构造方法,其构造方法可以被本类的其他构造方法调用
- 不是由private 修饰构造方法,可以被其子类的构造方法调用 (一般用作设计模式用)
常见错误:
知识扩展
final 用法
- 深入了解
- abstract 和 static 不能结合使用
- abstract 和 private不能结合使用
- abstract 和 final 不能结合使用