继承,是面向对象软件技术当中的一个概念,与多态、封装共为面向对象的三个基本特征。
1-1.继承的概述
继承是多态的前提,如果没有继承,就没有多态。
继承主要解决的问题:共性抽取。
特点:
1).子类可以拥有父类的内容。
2).子类还可以拥有自己的内容。
1-2.继承的格式
定义父类的格式:和一个普通类的定义格式一样。
定义子类的格式:
public class 子类名 extends 父类名 { }
1-3.继承中成员变量与成员方法的访问特点
在父子类继承关系中,如果成员变量重名,则创建子类对象时,访问方式有两种:
1).直接通过子类对象访问成员变量。在定义对象时,等号左边是谁,访问变量时就优先用谁的变量,如果没有,便向上找,若全部没有则编译报错。
2).间接通过成员方法访问成员变量。其中,成员方法属于谁,就用谁,没有就往上找。
在父子类继承关系中,创建子类对象,访问成员方法的规则:创建对象是谁,就优先用谁,如果没有,就往上找。
注意:无论是成员变量还是成员方法,若在本类中没有都是往上找,绝不会向下找。
1-4.区分子类中重名的三种变量
局部变量 本类变量 父类变量
直接写成员变量 this.变量名 super.父类成员变量名
在父子类继承关系中,创建子类对象,访问成员方法的规则:创建对象是谁,就优先用谁,如果没有,就往上找。
注意:无论是成员变量还是成员方法,若在本类中没有都是往上找,绝不会向下找。
1-5.继承中方法的覆盖重写
重写,指在继承关系中,方法的名称一样,参数列表也一样。
注意区分重写与重载:
重写:方法名一样,参数列表也一样。
重载:方法名一样,但是参数列表不一样。
方法重写的特点:创建的是子类对象,则优先用子类方法。
注意事项:
1).必须保证父子类之间的方法名称和参数列表相同,可以通过在前面加注解@Override验证是否正确重写了,但不写注解也是正确的。
2).子类方法的返回值必须小于等于父类方法返回值的范围。
(扩展:Java.lang.Object类是所有类的公共最高父类)
3).子类方法的权限必须大于等于父类方法的权限修饰符
(扩展:权限修饰词:public>protected>(default)>private。备注:default不是关键字,而是什么都不写,留空)
覆盖重写的使用原则:对已使用的类,尽量不要重写去定义一个新类,而应该对原来的类进行更新修改。
1-6.继承中的构造方法的访问
特点:
1).子类构造方法当中有一个默认隐含的“super()”调用,所以一定是先调用父类构造,后执行子类构造。
2).可以通过super关键字在子类构造重载调用父类构造。
3).super的构造调用必须是子类构造方法的第一个语句。即,不能一个子类构造调用多次super构造。
2-1.super关键字的三种用法
1).在子类的成员方法中,访问父类的成员变量。
2).在子类的成员方法中,访问父类的成员方法。
3).在子类的构造方法中,访问父类的构造方法。
2-2.this关键字的三种用法
super关键字用于访问父类内容,this关键字用于访问本类的内容。
this用法:
1).在本类成员方法中,访问本类的成员变量。
2).在本类成员方法中,访问本类的成员方法。
3).在本类构造方法中,访问本类的另一个构造方法。注意,this在调用的也必须是构造方法中的第一个语句,也是唯一一个。
注意:this和super这两种构造调用,不能同时使用。
2-3.Java继承的三个特点
1).Java语言是单继承的,一个类的直接父类只能有唯一一个。
2).Java语言可以多级继承。
3).Java中最高父类是Java.lang.Object
一个子类的直接父类是唯一的,但一个父类可以有很多个子类,子类之间为兄弟类关系。
2-4.抽象的概念和格式
如果父类中的方法不确定如何进行方法体的实现,那么这就是一个抽象方法。
抽象方法:加上abstract关键字,然后去掉大括号直接分号结束。
抽象类:抽象方法所在的类必须是抽象类才行,在class之前加上abstract即可。
2-5.抽象方法和抽象类的使用
1).对抽象类,不能直接创建抽象类对象。
2).必须使用一个子类继承抽象父类。
3).子类必须覆盖重写抽象父类当中所有的抽象方法。
覆盖重写(实现):子类去掉抽象方法的abstract关键字,然后补上方法体大括号。
4).创建子类对象进行使用。
2-6.抽象方法和抽象类的注意事项
注意事项:
1).抽象类不能直接创建抽象类对象。
2).抽象类中,可以有构造方法,是供子类创建对象时,初始化父类成员使用。
3).抽象类中,不一定包含抽象方法,但又抽象方法的一定时抽象类。
4).抽象类的子类,必须是重写抽象父类中所有的抽象方法,否则,编译无法通过而报错,除非该子类也是抽象类。
守着安静的沙漠,等待着花开...