**
一、抽象类的概念及作用
**
抽象类
Java中可以定义没有方法体的方法,该方法由子类来具体实现。
该没有方法体的方法我们称之为抽象方法,含有抽象方法的类我们称之为抽象类
例:定义一个抽象类
public abstract class Demo1 //定义一个抽象类
{
public void method(){ //方法1
System.out.println("存在方法体的方法");
}
public abstract void print(){ //抽象方法,没有方法体,有abstract关键字做修饰
}
}
抽象方法的特点
a.只有方法头没有方法体的方法称为抽象方法
b.抽象方法用abstract来修饰
c.抽象方法代表一种不确定的操作或行为
d.抽象方法不能被调用
抽象类的特点
定义中含有抽象方法的类叫做抽象类
抽象类用abstract来修饰
抽象类代表一种抽象的对象类型
抽象类不能实例化
抽象类中可以有具体方法,可以没有抽象方法
注:包含有抽象方法的类一定是抽象类,抽象类中不一定有抽象方法*
abstract class Demo1
{
abstract public void printInfo();
}
//抽象类不能被实例化
public class Test {
public static void main(String[] args) {
Demo1 d = new Demo1() {
public void printInfo() {
// TODO Auto-generated method stub
System.out.println("`Demo1 print");
}
};
d.printInfo();
}
}
//不建议这样做,这样做,实例化就没意义了
运行结果:Demo1 print
abstract class Demo1
{
abstract public void printInfo();
}
//抽象类不能被实例化
class Demo2 extends Demo1
{
public void printInfo() {
// TODO Auto-generated method stub
System.out.println("被实现的方法");
}
}
public class Test {
public static void main(String[] args) {
Demo2 d = new Demo2();
d.printInfo();
}
}
运行结果:被实现的方法
**
二、模板方法模式
**
定义
一个模板方法用一些抽象的操作定义一个算法,而子类将重定义这些操作以提供具体行为
意图
定义了一个操作中的一个算法框架,把一些步骤推迟到子类去实现。模板方法模式让子类不需要改变算法结构
abstract class con1
{
abstract void initUarts();
abstract void openLight();
abstract void openDoor();
abstract void openTV();
public void work()
{
initUarts();
openLight();
openDoor();
openTV();
}
}
class c51 extends con1
{
void initUarts() {
// TODO Auto-generated method stub
System.out.println("c51 initUarts");
}
void openLight() {
// TODO Auto-generated method stub
System.out.println("c51 openLight");
}
void openDoor() {
// TODO Auto-generated method stub
System.out.println("c51 openDoor");
}
void openTV() {
// TODO Auto-generated method stub
System.out.println("c51 openTV");
}
}
public class Test {
public static void main(String[] args) {
c51 c = new c51();
c.work();
}
}
运行结果:
c51 initUarts
c51 openLight
c51 openDoor
c51 openTV