20.Java-抽象设计

抽象方法

使用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作为前缀,其目的是一眼就能看出是抽象类。

模板方法模式应用的简单规则:

抽象父类负责定义操作中的业务骨架,而把某些具体的实现步骤延迟到子类中去实现

抽象父类至少提供的方法:
  • 模板方法:一种通用的处理方式,即模板;
  • 抽象方法:一种具体的业务功能实现,由子类完成;
    注意:抽象父类提供的模板方法只是定义了一个通用算法.其实现必须依赖子类的辅助。

你可能感兴趣的:(20.Java-抽象设计)