一:继承
是在合理的范围中进行的抽取 ,抽取出子类父类的关系:
比如:学生类/教师类/员工类 ===》 继承自 人类
1.使用继承步骤:
(1) 将多个类中相同的属性和行为提取出来 放到一个单独的类里,
这个单独的类就叫父类/基类/超类。
(2) 将特有属性和行为 放在各自的类中,这些各自的类就叫子类/派生类。
(3) 实现继承: 子类 extends 父类
2.继承的好处:
(1)提高了代码的复用性,父类定义的内容,子类可以直接拿过来用就可以了,不用代码上反复重复定义了
(2)便于代码的扩展
(3)为了以后多态的使用。是多态的前提。
3.父类private修饰的内容,子类也继承过来了。
4.个父类可以有多个子类。
5.一个子类只能有一个直接父类。 但是可以间接的继承自其它类。
6.继承具有传递性:
Student 继承自 Person 继承自 Object
Object类是所有类的根基父类。
所有的类都直接或者间接的继承自Object。
8.子类能继承父类的哪些资源:(父类的权限修饰符)
public : 本类,同包子类,同包非子类,不同包子类,不同包非子类
protected:本类,同包子类,同包非子类,不同包子类
默认的:本类,同包子类,同包非子类
private:本类
二:方法的重写
1.继承过来的方法----------》方法的重写!从父类中继承过来的方法,不适用于子类对象,所以子类需要重写继承过来的方法。
重载:本类下, 方法名相同,参数列表不同,与返回值和访问修饰符无关 的两个或两个以上的方法叫做重载。
重写:子类里,方法名相同,参数列表也相同,
【引用数据类型:】(返回值相同或者缩小),
【基本数据类型:】(返回值必须相同)
【访问修饰符:】相同或扩大。
2.子类的方法名字和父类必须一致,参数列表(个数,类型,顺序)也要和父类一致。
三:super
1. super:指的是: 父类的
2. super可以修饰属性,可以修饰方法;在子类的方法中,可以通过 super.属性 super.方法 的方式,显示的去调用父类提供的属性,方法。在通常情况下,super.可以省略不写。在特殊情况下,当子类和父类的属性重名时,你要想使用父类的属性,必须加上修饰符super.,只能通过super.属性来调用。
3.super修饰构造器
其实我们平时写的构造器的第一行都有:super() -->作用:调用父类的空构造器,只是我们一般都省略不写。(所有构造器的第一行默认情况下都有super(),但是一旦你的构造器中显示的使用super调用了父类构造器,那么这个super()就不会给你默认分配了。如果构造器中没有显示的调用父类构造器的话,那么第一行都有super(),可以省略不写)。
如果构造器中已经显示的调用super父类构造器,那么它的第一行就没有默认分配的super();了。在构造器中,super调用父类构造器和this调用子类构造器只能存在一个,两者不能共存:因为super修饰构造器要放在第一行,this修饰构造器也要放在第一行。
四:例子
要求:
- 请用面向对象的思想,设计游戏中的蛇怪和蜈蚣精。
- 分析蛇怪和蜈蚣精的公共成员,提取出父类---怪物类
- 利用继承机制,实现蛇怪类和蜈蚣精类
- 利用封装机制,设置属性的私有访问权限,通过公有的get,set方法实现对属性的访问
- 攻击方法,描述攻击状态。内容包括怪物名字,生命值,攻击力
- 编写测试类,分别测试蛇怪和蜈蚣精的对象及相关方法(测试数据信息自定)
- 定义名为mon的包存放怪物类,蛇怪类、蜈蚣精类和测试类
参数分析思路:
蛇怪类:
属性包括:怪物名字、生命值、攻击力
方法包括:攻击、移动(曲线移动)、补血(当生命值<10时,可以补加20生命值)
蜈蚣精类:
属性包括:怪物名字、生命值、攻击力
方法包括:攻击、移动(飞行移动)