一、抽象类
java中可以定义没有方法体的方法,该方法由子类来具体实现
该没有方法体的方法我们称之为抽象方法,含有抽象方法的类我们称之为抽象类
抽象类的意义就在于:为子类提供统一的规范的模板,子类必须实现相关的抽象方法
特点: 定义中含有抽象方法的类叫做抽象类 抽象类用abstract来修饰 抽象类代表一种抽象的对象类型 抽象类不能实例化 抽象类中可以有具体方法,可以没有抽象方法
二、抽象方法
只有方法头没有方法体的方法称为抽象方法
抽象方法用abstract来修饰
抽象方法代表一种不确定的操作或行为
抽象方法不能被调用
三、DEMO
abstract class Demo1
{
abstract public void printfIofo();
}
//抽象类时不能被实例化的
class Demo2 extends Demo1{
public void printfIofo() {
// TODO Auto-generated method stub
System.out.println("被实现的方法");
}
}
public class Test {
public static void main(String[] args) {
//匿名内部类
// Demo1 d =new Demo1() {
// public void printfIofo() {
// TODO Auto-generated method stub
// System.out.println("demo1 print");
// }
// };
// d.printfIofo();
Demo2 d = new Demo2();
d.printfIofo();
}
}
运行结果:
被实现的方法
java抽象类应用模版方法模式
定义: 一个模板方法用一些抽象的操作定义一个算法,而子类将重定义这些操作以提供具体行为
意图: 定义了一个操作中的一个算法框架,把一些步骤推迟到子类去实现。 模板方法模式让子类不需要改变算法结构。
DEMO:
abstract class Controll{
abstract void initUart();
abstract void getComand();
abstract void openCurse();
abstract void openLight();
abstract void openTV();
public void work(){
initUart();
getComand();
openCurse();
openLight();
openTV();
}
}
class STC15Controller extends Controll{
void initUart() {
// TODO Auto-generated method stub
System.out.println("STC15 inituart");
}
void getComand() {
// TODO Auto-generated method stub
System.out.println("STC15 inituart");
}
void openCurse() {
// TODO Auto-generated method stub
System.out.println("STC15 inituart");
}
void openLight() {
// TODO Auto-generated method stub
System.out.println("STC15 inituart");
}
void openTV() {
// TODO Auto-generated method stub
System.out.println("STC15 inituart");
}
}
class c51Controller extends Controll{
void initUart() {
// TODO Auto-generated method stub
System.out.println("C51 inituart");
}
void getComand() {
// TODO Auto-generated method stub
System.out.println("C51 getComand");
}
void openCurse() {
// TODO Auto-generated method stub
System.out.println("C51 openCurse");
}
void openLight() {
// TODO Auto-generated method stub
System.out.println("C51 openLight");
}
void openTV() {
// TODO Auto-generated method stub
System.out.println("C51 openTV");
}
}
public class Test {
public static void main(String[] args) {
c51Controller c51 = new c51Controller();
c51.work();
STC15Controller STC15 = new STC15Controller();
STC15.work();
}
}
运行结果:
C51 inituart
C51 getComand
C51 openCurse
C51 openLight
C51 openTV
STC15 inituart
STC15 inituart
STC15 inituart
STC15 inituart
STC15 inituart