抽象类
final修饰的类,不能有子类。
abstract修饰的类,不能实例化。
不能用abstract修饰私有方法、静态方法、final的方法、final的类。
私有方法不能重写
避免静态方法使用类进行调用
final的方法不能被重写
final修饰的类不能有子类
示例1
航运公司系统,Vehicle类
java">public abstract class Vehicle{
public abstract double calcFuelEfficiency();
public abstract double calcTripDistance();
}
public class Truck extends Vehicle{
public double calcFuelEfficiency();
public double calcTripDistance();
}
public class RiverBarge extends Vehicle{
public double calcFuelEfficiency();
public double calcTripDistance();
}
示例2
GeometricObject
java">public abstract class GeometricObject {
String color;
double weight;
public GeometricObject(String color, double weight) {
this.color = color;
this.weight = weight;
}
public String getColor() {
return color;
}
public void setColor(String color) {
this.color = color;
}
public double getWeight() {
return weight;
}
public void setWeight(double weight) {
this.weight = weight;
}
public abstract double findArea();
}
Circle
java">public class Circle extends GeometricObject{
private double radius;
public Circle(double radius, String color, double weight){
super(color, weight);
this.radius = radius;
}
public double getRadius() {
return radius;
}
public void setRadius(double radius) {
this.radius = radius;
}
@Override
public double findArea(){
return 3.14 * radius * radius;
}
}
Rectangle
java">public class Rectangle extends GeometricObject{
private double width;
private double height;
public Rectangle(String color, double weight, double width, double height) {
super(color, weight);
this.width = width;
this.height = height;
}
public double getWidth() {
return width;
}
public void setWidth(double width) {
this.width = width;
}
public double getHeight() {
return height;
}
public void setHeight(double height) {
this.height = height;
}
@Override
public double findArea() {
return width * height;
}
}
GeometricTest
java">public class GeometricTest {
public static void main(String[] args) {
// 抽象类不能创建实例
Circle circle = new Circle(2.0, "Blue", 3.0);
System.out.println(circle.findArea());
Rectangle rectangle = new Rectangle("red", 3.0, 3.0, 4.0);
System.out.println(rectangle.findArea());
}
}
模板方法设计模式
java">public class TemplateMethodTest {
public static void main(String[] args) {
BankTemplateMethod drawMoney = new DrawMoney();
drawMoney.process();
System.out.println();
BankTemplateMethod btm = new ManageMoney();
btm.process();
}
}
// 创建抽象类
abstract class BankTemplateMethod{
public void takeNumber() {
System.out.println("取号排队");
}
public abstract void transact(); // 办理具体业务
public void evaluate() {
System.out.println("反馈评分");
}
// 模板方法,把基本操作组合到一起
public final void process() {
this.takeNumber();
this.transact();
this.evaluate();
}
}
// 子类
class DrawMoney extends BankTemplateMethod {
@Override
public void transact() {
System.out.println("我要取款");
}
}
class ManageMoney extends BankTemplateMethod{
@Override
public void transact() {
System.out.println("我要理财");
}
}