问题:如果需要创建人,学生,教师,农民,士兵等多个类时,会做很多重复的工作;
例:需要创建多个僵尸类,包括僵尸:普通僵尸,爆炸僵尸,帽子僵尸,跳高僵尸;
缺点:定义新类时,工作量增大,修改维护时也需要大量的工作;
如何解决以上的问题?
一、继承(inheritance):
原理:继承可以简化类的设计,可以利用现有的类创建新的类;
特点:通过继承,可以让子类直接拥有父类的属性和方法;
本质:继承是类和类之间的一种关系;
二、继承的语法
class 子类名 extends 父类名{
}
//extends:扩展;
三、关于继承的理解
1.在继承关系下,位于上层的是父类,下层的是子类,子类拥有父类的所有属性和方法;
2.java中只支持单继承,即每个类只能由一个直接父类,但支持多层继承;
3.子类是父类的一种特殊情况,绝不能脱离父类的范畴;
4.可以口头使用 is 来判断,子类 is 父类通不通顺,如果通顺就在范畴内,否则不能继承;
四、重写方法
overRide(overWrite)
方法重写:在继承关系下,子类覆盖父类的方法,就叫重写;
要求:方法名相同,参数相同;
五、重写与重载的区别
1.定义不同:
重写是方法名相同,参数也相同,并且一定要在继承关系下使用;
重载是方法名相同,参数不同的一组方法;
2.翻译不同:
重写:overRide;
重载:overload;
六、关于继承的三句话(小结)
1.父类有的,子类一定有;
2.父类没有的,子类可以扩展(增加);
3.父类有的,子类可以修改(重写);
七、super关键字
注意:父类和子类的属性尽量不要重复;
回顾:this:当前对象的引用;
super:父类对象的引用;
用法:
super.属性;
super.方法;
super(参数列表);调用父类的构造方法;
注意:this同样可以这样用;
八、原理
Student是Person的一个子类,创建Student对象时,内部先创建一个Person对象并与我们能看到的Student对象建立联系,this关键字会在我们能看到的Student的对象的属性和方法中寻找,super关键字会在Person的对象的属性和方法中寻找。
九、继承中的构造方法
核心思想:创建子类对象前,一定会先创建父类的对象;
即当实例化一个子类的对象时,会先调用父类的构造方法,再调用子类的构造方法;
Student s = new Student();
1.继承关系中,属性和普通方法可以被继承,但构造方法不能被继承;
2.子类的构造方法中,一定要先调用父类的构造方法;
3.如果不显示调用父类的构造方法,编译器会生成一个语句super();来先调用父类无参的构造方法;
问题:父类有带参数的构造方法,而子类没有显示构造方法,则报错;
改正:父类有带参数的构造方法,子类定义带参数的构造方法(需在第一条语句写super(参数列表);),则不报错;
改正:父类没有显示构造方法,子类有显示定义方法(不写super,系统自动给你生成),不报错;
十、 this的用法
1.super和this的优先级,父类无参-->父类有参-->子类无参-->子类有参;
2.this(参数列表);表示,调用当前类的其他构造方法,此语句必须放在构造方法使用,并且是第一行;
3.this.属性或方法:调用当前对象的属性或方法;
对比:
1.super();调用父类的构造方法;
2.super.属性或方法:调用父类对象的属性或方法;