JAVA第8章----抽象类与接口

抽象类

目的:子类继承某些父类的时候,对其有一些明确的方法覆写的要求。

基本定义

关键字:abstract
抽象类及其中的抽象方法,都需要使用abstract进行定义
抽象类并不是一个功能完整的类,使用时须遵循以下原则:

  1. 必须提供子类,子类使用extends继承抽象类
  2. 子类(可以不是抽象类)覆写抽象类全部抽象方法
  3. 抽象类对象实例化可以利用对象多态性,通过子类对象向上转型完成

抽象类不直接进行对象实例化:
抽象方法“徒有空壳”,并没有方法体,所以实例化之后的对象调用没有方法体的方法,实现不了任何功能;所以需要通过子类将方法覆写,子类实例化对象调用覆写后的方法体。

注意事项

  • 抽象类必须被子类继承,所以它与final“水火不容”
  • 抽象类中可以没有任何抽象方法,只有普通方法也OK,但是无论如何,抽象类不能直接进行对象实例化
  • 抽象类允许提供普通方法或者构造方法,所以子类默认会调用父类的无参构造,或者通过super()指定调用父类某种构造方法
  • static方法不会受到抽象类的影响,仍然可以通过类名直接调用

模板设计模式

代码在P.189页

通过Action抽象类定义了三个抽象方法“Read(), paint(), run()”,分别需要子类“Book(), Sketchpad(), Car()”来实现其中的1~2个方法
注:由于抽象方法需要子类全部继承覆写,但是三个子类并不需要3个功能,比如Book()不需要run(),所以中间设置了适配器类ActionAdapter()作为Action的子类继承三个方法并覆写为普通方法,我们实际需要的三个子类作为ActionAdapter的子类,这样子就可以实现在三个方法中有选择的继承。
一点思考:之所以绕了一圈,不直接把抽象类里的方法设置为普通方法,应该是为了保持抽象类的优势,其定义的所有抽象方法强制被继承的子类覆写(实现)。

举个不是很恰当的栗子:
不妨把抽象类想象成老师,他认为学生什么都会,于是布置给计算机方向,语言方向,数学方向的同学三个题目:
“写一个1000行的代码实现某个操作,写一个1000字的英文paper简述设计思路,通过数学语言将设计思路抽象成符号。”
实际情况是,大家啥也不会(bushi),大家需要分工合作,每人完成一个板块的任务,于是助教老师出现了(就是我们可爱的适配器)。她说,大家把这个作业当成小组作业,八仙过海,各显神通叭~
于是,大家happy happy地解决了这个作业。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值