抽象方法
使用abstract修饰且没有方法体的方法,称为抽象方法
特点:
- 1.使用抽象++abstract++修饰,方法没有方法体,留给子类去实现/覆盖
- 2.抽象方法修饰符不能是private和final以及static
- 3.抽象方法必须定义在抽象类或者接口中
一般的:习惯性把abstract写在方法修饰符最前面,一看就知道是抽象方法
public abstract class AbstractGraph{
abstract public double getArea();
}
子类必须覆写抽象方法,否则编译会报错
public class Point extends Graph{
public double getArea(){
return 0D;
}
}
抽象类
使用abstract关键字修饰的类。
特点:
- 不能创建实例。既不能new一个抽象类,即使创建出抽象类对象,调用抽象方法,根本没有方法体。
- 可以不包含抽象方法,若一旦包涵,该类必须作为抽象类,抽象类可以包含普通方法
- 若子类没有实现父类所有的抽象方法,那么子类必须是抽象类(抽象派生类).
- 抽象类的构造方法不能都定义为私有的
- 抽象类不能使用final修饰(final不能有子类,而抽象类必须得有子类)。
- 抽象类是不完整的类,需作为基类,必须要有子类功能才能得以实现。
什么时候使用抽象类
如果有多个类具有相同的方法声明,但具体实现不一样,此时创建一个抽象类,将类作为该抽象类的子类,子类中相同声明的方法在父类中声明成抽象方法,然后在各个子类中覆写抽象方法完成不同的实现细节。有的时候,为了防止实例化某一个类,我们也可以把该类作为抽象类
抽象类和普通类的区别
不能创建对象,允许(但不强制)包含抽象方法
一般的习惯把抽象类的类名都是使用abstract作为前缀,其目的是一眼就能看出是抽象类。
模板方法模式应用的简单规则:
抽象父类负责定义操作中的业务骨架,而把某些具体的实现步骤延迟到子类中去实现
抽象父类至少提供的方法:
- 模板方法:一种通用的处理方式,即模板;
- 抽象方法:一种具体的业务功能实现,由子类完成;
注意:抽象父类提供的模板方法只是定义了一个通用算法.其实现必须依赖子类的辅助。