关山初度尘未洗,策马扬鞭再奋蹄!这篇文章主要讲述《Java4Android》视频学习笔记——为什么用抽象类?相关的知识,希望能为你提供帮助。
我们来举个例子,然后引出这个问题的答案:
市面上有 喷墨式打印机 和 针式打印机 这两种形式的打印机,我们需要编程来实现他们的 开机,关机以及打印。
构建父类Printer
class Printer
{
void open(){
System.out.println("OPEN");
}
void close(){
System.out.println("CLOSE");
}
void print(){
//由于两种打印机的打印方式不同,所以无法在父类里面写出具体打印方式,因此空着。
}
}
构建子类HPprinter
//该打印机为喷墨打印机
class HPprinter extends Printer
{
void print(){
System.out.println("喷墨打印");
}
}
构建子类Canonprinter
//该打印机为针式打印机
class Canonprinter extends Printer
{
void print(){
System.out.println("针式打印");
}
}
构建主函数 Test 实现功能
【《Java4Android》视频学习笔记——为什么用抽象类()】class Test
{
public static void main(String args[]){
Printer HP = new HPprinter();
HP.open();
HP.print();
HP.close();
Printer Canon = new Canonprinter();
Canon.open();
Canon.print();
Canon.close();
}
}
编译运行发现没有错误。
可是,计算机说没有错误就真的没有错误吗?不见得。设想一下,如果,写子类程序的人要是粗心,忘记了复写父类的 void print(){};
会发生什么事情?
当然,编译时没有错误的,可是,打印机却没有了最重要的功能,并且,这种情况电脑是不会告诉你,哪儿有问题的。虽然这是个可能性很低的例子,但是大家不要纠结于此,且看老夫引蛇出洞:
既然问题出现了,那就有解决方法,这时,我们灵光乍现,忽然想起了亲爱的 抽象函数,它不就是干这个的吗?
重新定义父类 Printer
abstract class Printer
{
void open(){
System.out.println("OPEN");
}
void close(){
System.out.println("CLOSE");
}
abstract void print(){
}
}
现在当我们忘记复写 print(){};
的时候,系统是编译不过去的,重新实现人机结合。同时,需要注意的一句话是:
如果一段代码在语意上是错误的,那它在语法上也应该是有错误的,比如说我们之前的 print(){};
,它居然是空着的,那它就是在语意上说不过去,所以语法上也是有错误的,只不过编译器没有识破它。最后我们还是用抽象函数这个语法解决了问题。
推荐阅读
- 时间丢了怎样办?xp如何把具体时间召唤出来
- Android Handler内存泄露
- Android数据加密之MD5加密探讨与总结
- 零基础学Android开发之Java语言学习02-基本语法
- Android登录界面实现
- Android开发之获取系统所有进程信息。
- Nexus 5 Change FireFox OS to android
- Android中获取屏幕高度和宽度
- android中的动画之布局动画