嵌入式之路,贵在日常点滴
---阿杰在线送代码
目录
(3)外部类不能直接访问内部类的成员,必须先建立内部类的对象才能访问
(2)当然,也可以用“多态”进行访问(目前我也不知道多态是啥)
一、抽象类概念和作用(abstract)
抽象类
java中可以定义没有方法体(只有方法头)的方法,该方法由子类来具体实现。
该没有方法体的方法我们称之为抽象方法,含有抽象方法的类我们称之为抽象类。
抽象方法的特点:
- 只有方法头没有方法体的方法称为抽象方法
- 抽象方法用abstract来修饰
- 抽象方法代表一种不确定的操作或行为
- 抽象方法不能被调用
抽象类的特点:
- 定义中含有抽象方法的类叫做抽象类
- 抽象类用abstract来修饰
- 抽象类代表一种抽象的对象类型
- 抽象类不能实例化
- 抽象类中可以有具体方法,可以没有抽象方法
抽象类的使用方法 (抽象类不能实例化)
没有做一个类来继承这个抽象类,这个时候声明类并实例化会报错,
如何解决:完成提示的方法体(ALT /),不靠谱的使用方式(这种不靠谱的方式也是后面提及的匿名的内部类)
abstract class Demo1
{
abstract public void printInfo();
//在抽象类里面的方法,要么完善方法体,要么作为抽象方法
//没有方法体的方法,该方法由子类来具体实现
}
//抽象类不能实例化
public class Demo {
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("来自:Demo2");
}
}
public class Demo {
public static void main(String[] args) {
Demo2 d = new Demo2();
d.printInfo();
}
}
运行结果:
来自:Demo2
抽象类的应用:模板方法模式
模板方法模式定义:
父类抽象(abstract)化定义一系列方法作为模板(不具体),把一些步骤推迟到子类去实现,子类将重写这些方法以提供具体行为。
意图:
定义了一个操作中的一个算法框架,把一些步骤推迟到子类去实现。模版方法模式让子类不需要改变算法结构
之前做的智能家居可以运行在多个平台上,比如51,32,树莓派,现在就定义在每个平台上完成这个项目的通用模板,然后再在具体平台实现,以51为例子(当然这只是一个类比,java在51单片机上不能运行):
abstract class Control
{
abstract void getCommand(); //是概括了在不同平台上完成智能家居项目的模板
abstract void socketCommand(); //抽象化这些方法,在子类(类比于具体平台)
abstract void lightControl(); //中再进行具体化
abstract void cameraControl();
public void work(){ //控制的基本流程
getCommand(); //接收指令
socketCommand(); //来自socket的指令
lightControl(); //灯的控制
cameraControl(); //相机的控制
}
}
class C51platform extends Control //当这个地方出现红色波浪线的时候
{ //光标放上去,可以看到解决方法的快捷键
//把抽象方法重写,全部具体实现
void getCommand() {
System.out.println("getcommand in 51");
}
void socketCommand() {
System.out.println("socketcommand in 51");
}
void lightControl() {
System.out.println("lightcontrol in 51");
}
void cameraControl() {
System.out.println("cameracontrol in 51");
}
}
public class Demo {
public static void main(String[] args) {
C51platform c51 = new C51platform(); //实例化出一个对象
c51.work(); //执行具体流程
}
}
运行结果:
getcommand in 51
socketcommand in 51
lightcontrol in 51
cameracontrol in 51
二、接口
接口的概念
接口(Interface),在JAVA中是一个抽象类型,是抽象方法的集合(重点