学习目标:掌握语法和特点
# java的继承体系
- 继承关系 类与类之间的关系 (亲血缘的关系)
- 实现关系 类与接口之间的关系 (师徒关系)
# 继承关系概念
- 关键字 extends 扩展
class A extends B
A 代表子类 所有的子孙后代 徒子徒孙
B 代表父类 所有的父辈
- 案例
父类:角色Role
- 属性:名字,血量,攻击力
- 方法:攻击,移动。。。
子类:英雄Hero,敌人Enemy。。。
- 继承关系的特点
- 子类可以继承父类所有的属性和方法,除了构造方法(构造方法:空参构造,有参构造)
- 如果一个类没有写继承,默认都继承自Object
- 在java中一个父类可以扩展多个子类
- 在java中只支持单继承(一个子类只能有一个直接的父类)
- 在java中支持多层继承(一层一层继承下来)
- 如果父类封装起来,子类肯定无法直接访问属性,
但是可以通过父类提供的get/set方法进行访问
- 如果子类需要有参构造创建对象
方式一:在构造方法中使用set方法进行赋值
方式二:利用父类的有参构造进行构造方法的传值
- super关键字:代表当前父类的引用或类名
# 方法的重写
出现在继承体系中,方法名相同,参数列表相同,返回值相同
子类对父类方法的重写
(super.方法名)
# 方法的重载
出现在同一个类中,方法名不同
参数列表不同(数量 or 类型 or 顺序 )
原返回值无关。
# 继承的好处
1.提高代码的维护性(增删改)
弊端:增加了类与类之间的耦合度(权衡)
2.提高了代码的扩展性
父类如果要新增功能或者增强(改),符合非入侵性编程的原则
可以继续扩展其他的子类(子类方法的重写)
# 继承的使用场景
当多个类具有共同的属性和方法时,可以考虑将这些共性抽离出来形成一个父类
如果要对父类进行扩展和增强,可以考虑在继承的基础上重写方法
# java抽象(建立在继承的基础上进一步进行强制规定)
- 含义:关键字 abstract 抽象的修饰符
- 修饰类(抽象类)
- 无法实例化(new 不出来)
- 只能被继承
- 普通的类有的元素,抽象类中都有,抽象类中还可以有抽象方法
- 修饰方法(抽象方法)
- 没有方法体
- 抽象方法必须被重写
- 抽象方法只能出现在抽象类中
@Override java中自带的注解
作用:验证本方法是否是对父类方法的重写
# 抽象的使用场景
1.当父类绝对不需要创建对象时,可以考虑将父类抽象化
2.如果抽象类中的某些方法不需要立即实现,未来靠子类来实现
可以考虑将此方法抽象。
# 游戏改造和设计(面向对象) 《猜拳游戏》
- 角色类
- 玩家类
- 敌人类
- 裁判类
- 应用程序类
- 主函数类
# 支线任务
1.什么是递归
递归,在计算机科学中是指一种通过重复将问题分解为同类的子问题而解决问题的方法。
递归最恰当的比喻,就是查词典。我们使用的词典,本身就是递归,为了解释一个词,需要使用更多的词。当你查一个词,发现这个词的解释中某个词仍然不懂,于是你开始查这第二个词,可惜,第二个词里仍然有不懂的词,于是查第三个词,这样查下去,直到有一个词的解释是你完全能看懂的,那么递归走到了尽头,然后你开始后退,逐个明白之前查过的每一个词,最终,你明白了最开始那个词的意思。
递归的两个特征
- 自身调用:原问题可以分解为子问题,子问题和原问题的求解方法是一致的,即都是调用自身的同一个函数。
- 终止条件:递归必须有一个终止的条件,即不能无限循环地调用本身。
2.关键字 final 是什么意思?
在Java中,final关键字可以用来修饰类、方法和变量(包括成员变量和局部变量)。
1.修饰类
当用final修饰一个类时,表明这个类不能被继承。
2.修饰方法
是把方法锁定,以防任何继承类修改它的含义;
3.修饰变量
对于一个final变量,如果是基本数据类型的变量,则其数值一旦在初始化之后便不能更改;如果是引用类型的变量,则在对其初始化之后便不能再让其指向另一个对象。