抽象类:Java中可以定义没有方法体的方法,该方法由子类来具体实现。没有方法体的方法我们称之为抽象方法,含有抽象方法的类我们称之为抽象类。
抽象方法的特点:
- 只有方法头没有方法体的方法称为抽象方法
- 抽象方法用abstract来修饰
- 抽象方法代表一种不确定的操作或者行为
- 抽象方法不能被调用
抽象类的特点:
- 定义中含有抽象方法的类叫做抽象类
- 抽象类用abstract来修饰
- 抽象类代表一种抽象的对象类型
- 抽象类不能够实例化
- 抽象类可以有具体方法,可以没有抽象方法(但是无意义)
abstract class Mothd{//abstract修饰抽象类
abstract public void pringtInfo();//抽象方法要放在抽象类中
}
//抽象类不能够实例化,当能通过继承对抽象类中的抽象方法添加内容
class Mothd1 extends Mothd{
public void pringtInfo() {
// TODO Auto-generated method stub
System.err.println("抽象方法被调用");
}
}
public class Demo {
public static void main(String[] args) {
//Mothd m = new Mothd();//抽象类不能够实例化
//通过实例化子类,间接调用抽象方法,实现类的匿名化。
Mothd1 m1 = new Mothd1();
m1.pringtInfo();
}
}
模板方法模式
- 定义:一个模板方法用一些抽象的操作定义一个算法,而子类将重定义这些操作以提供具体行为
- 意图:定义了一个操作中的一个算法框架,把一些步骤推迟到子类去实现。模板方法模式让子类不需要改变算法结构
abstract class Control{
abstract void initUart();
abstract void openLight();
abstract void getCommand();
abstract void openDool();
public void work(){
initUart();
openLight();
getCommand();
openDool();
}
}
class C51 extends Control{
void initUart() {
// TODO Auto-generated method stub
System.out.println("c51 initUart");
}
void openLight() {
// TODO Auto-generated method stub
System.out.println("c51 openLight");
}
void getCommand() {
// TODO Auto-generated method stub
System.out.println("c51 getCommand");
}
void openDool() {
// TODO Auto-generated method stub
System.out.println("c51 openDool");
}
}
public class Test {
public static void main(String[] args) {
C51 c = new C51();
c.work();
}
}