java自学之路-day08
JAVA08
继承
l 概念
- 现实中子女继承父辈财产
- Java中继承描述类与类之间的关系
- Java中继承每个子类有父类所有的属性
- 员工是父类 各部门员工是子类
- 各部门员工是父类 各部门中的一种是子类
l 格式和使用
- extends关键字
- class 子类 extends 父类
l 优点
- 提高了代码复用性 例如员工姓名
- 是类与类之间有了关系 提供了多态的可能
l 注意事项
- 类只支持单继承只能有一个父类
- 多继承有安全隐患 例如 同一个变量名是到底是哪个的问题
- 支持多重继承 即允许有父类的父类 紧密连接性强
l 继承体系
- 父类 共性
- 子类 特性
l 继承子父类中成员变量的特点
- 成员变量子类自己有就调用自己的 没有的找父类
- 子类中使用super调用父类成员
- 子类叫派生类 父类叫超类
l 继承父类的方法
测试类调用子类对象方法时 子类有调用子类的方法 没有调用父类的方法
- 重载
方法名不同
- 重写覆盖
和父类方法一模一样 此时会调用子类的方法
用super. 来继承父类方法原有内容
- 举例
手机 智能手机
- 注意事项
a) 保证子类方法权限大于或等于父类方法
b) 四大权限 public protected default private
c) 返回值 函数名 函数类表一样
抽象类
l 概念
- 父类只知道子类有哪些方法不知道具体怎么实现
- 父类只是有 没有主体的方法 需要abstract修饰 父类也需要用abstract修饰
- 抽象类不能实例化 因为是实例化后调用抽象方法无法调用运行
- 特点
- 方法和类都需要别abstract修饰
- 抽象类不可以直接创建对象 实例化后调用方法没有意义
- 如果子类继承了抽象类 重写了一部分抽象方法 这个子类还是一个抽象类
继承了抽象类后,拥有了多个抽象方法 如果只重写了一部分 那么还是存在一些抽象方法 拥有抽象方法的类叫做抽象类,所以子类还是抽象类
- 抽象类可以存在抽象方法和普通方法
l 设计思想
- 抽象类的作用:继承的体系 保证功能的完整性
- 强制子类重写抽象方法
l 细节问题
- 抽象类一定是个父类
- 可以不写抽象方法可以定义有方法体的方法
为了让子类直接使用
- 不能和那些关键字一起使用
private 这样子类不能继承
final
static
练习
It公司员工模拟
总结
- 继承 现有类 父类 派生类 子类
- 子类拥有父类所有 super. 调用方法 或者建立对象调用方法 super.调用变量
- 继承紧密连接 耦合度高
低耦合高内聚是软件设计的一个基本原则,说的是在程序的各各模块中,尽量让每个模块独立,相关的处理尽量在单个模块中完成,就是俗话说的:该干嘛干吗去! 优点:能提降低各模块的之间的联系,减少“牵一发而动全身”的几率,提高开发效率,降低升级维护成本,也便于进行单元测试,提高软件质量。
- 只有Object没有父类
- 不能为了继承而继承 必须要有实际关系
- 抽象类
- 抽象类面试题:
- 抽象类中是否可以没有抽象方法?如果可以,那么,该类还定义成抽象类有意义吗?为什么?
可以没有抽象方法,有意义,不会让其他人直接创建该类对象,适配器
接口
l 概念
- 功能的集合
- 比抽象类的跟抽象的类
- 特殊的抽象类
- 全部是抽象方法
l 定义
- 关键字 不再是class 而是 interface
- 文件扩展名任然是.class
- 不能定义带有方法体的方法
- 固定格式
public abstract 返回值类型 方法名字(参数列表);
- 成员变量必须常量
- 格式:public static final 数据类型 变量名=值
l 实现类
- 类和接口为实现关系
- 关键字 implements
- 必须靠实现类进行重写方法否则不能用
l 接口成员特点
- 成员变量
固定定义格式:
public static final 数据类型 变量名=值
权限
静态:可以直接被类名调用 类名.a
最终:固定变量的值
public static final 可以省略不写 但不等于没有 还可以选择性书写
- 成员方法
public abstract 可以不写,选择性书写 可以在大纲图上见到
但在实现类中必须要写 否会默认为default会缩小了权限
l 实现类还是一个抽象类
- 如果实现类没有全部实现接口方法那么是实现类还是一个抽象类
- 因为继承了接口就会继承抽象方法 如果有抽象方法没有完全实现就宝海了抽象方法,就成为了抽象类
l 多实现接口
- 一个类可实现多个接口
- Implements A,B
- 没有安全隐患 方法全是抽象的 没有功能主体 即使两个接口方法相同
- 但是两个方法不可以返回值不同而方法名相同
l 继承类的同时实现多个接口
- extends D implements A,B
- 接口的出现避免了单继承的局限性 父类中定义的实物基本功能 接口中定义事物的扩展功能
l 接口的多继承
- 接口之间是继承关系
- 可以是多继承
- 没有安全隐患 全是抽象方法
- 实现类必须重写所有接口的全部抽象方法
- Java中有多继承吗
a) 类没有多继承
b) 接口之间有多继承
l 接口思想
- 暴露出来的规则
- 降低了耦合性 设备与设备之间解耦
- 扩展了功能
- 面向接口编程 实现功能 我不实现 找人去实现(面向对象) 为了统一结果定义接口(面向接口)
- SUN公司提供JDBC接口 功能由厂家实现
l 接口和抽象的区别
- 抽象类 父类不能准确表述功能 因此就定义抽象方法 成为抽象类
- 接口 子类额外的功能 定义抽象类来增加额外功能
- Is a 。。。like a。。。
- 两种的选用
优先选择接口少用抽象类
定义子类行为又是共性的行为时用抽象类
多态
l 概述
- 继承 封装 多态 面向对象三大特征
- 学生既是人也是一个学生
- 一个子类对象可以给本类赋值也可以给父类赋值
- Person p=new Student();
Student s=new Student();
- 或者赋值给接口也可以
- 前提 是子父类关系和接口实现类关系
- 在使用多态后的父类引用变量调用方法时会调用子类重写后的方法
l 三种定义格式
- 抽象类型或者父类类型或者接口类型 变量=new 子类的对象();
- 多态调用方法方法必须运行子类重写的方法
l 多态成员方法和成员变量特点
- 成员变量参考父类是否有变量,如果有编译成功,否则编译失败,运行的时候是父类的变量值
- 运行成员方法编译时,参考的是父类是否有此方法,有就编译成功,否则编译失败,运行时,子类有方法就运行子类方法,否则运行父类方法
- 总结
方法
编译看父类运行看子类
变量
编译运行都看父类
l Instanceof关键字
- 比较运算符
- 比较一个引用类型的变量是不是这个类型的对象
- 判断某个对象是否属于某个类型
l 多态转型
- Java强制数据类型的语言,参与运算的数据,需要保证类型的统一性
- 多态数据类型一致 则自动类型提升
- 父类范围大 子类范围小 子类向上提升为父类类型 上转型(自动类型提升)
- 优点
可以调用子类父类的公共方法,公有内容
缺点
不能调用子类特有内容
- 父类转子类 父类范围大 子类范围小 父类强行转换成子类类型加括号
子类类型 子类变量=(子类类型)父类变量
向下转型(强制转换类型)
l 练习:笔记本案例
进行笔记本类描述 实现笔记本使用usb鼠标和键盘
- usb接口 开启关闭功能
- 笔记本 开关机功能 使用usb接口设备的功能
- 外设 支持usb接口
- 笔记本面向usb接口 外设也面向usb 接口
- 事物分析
笔记本
开关机与外部无关 是内部私有方法
定义一个使用usb功能的方法参数是USB对象 即usb的实现类 即具体的一个外设 利用USB实例对象实现接口方法
Usb接口 开关闭功能 抽象方法
外设 工作与外部无关 是内部私有方法 支持usb接口 实现接口方法

浙公网安备 33010602011771号