因为java面向对象是期末考试重点,所以现在开始对此部分内容进行一些知识点总结。
这一篇是关于面向对象三大特征的第二个——继承。
首先,我们知道继承是类和类之间的父子关系,那我们为什么要用继承,是为了解决什么呢。
1、通过把多个子类中重复的代码抽取到父类中,减少重复的代码,提高代码的复用性。
2、子类可以在父类基础上,增加其他功能,从而子类更加强大。
关键字 extends
格式:public class 子类 entends 父类{ }
知道了这些,我们最重要的是要自己能够判断什么时候需要用继承。可以用一句话概括来说,就是当类与类之间,存在相同的内容,并满足子类是父类中的一种,就可以考虑使用继承。
继承的特点
只支持单继承(一个子类继承一个父类),不支持多继承(子类继承多个父类),但是支持多层继承(子类A继承父类B,父类B继承父类C)。
而每一个类都直接或间接的继承于Object(后续再开一篇细讲object)
子类可以继承父类的哪些东西
下面我们将从三个方面来看,分别是构造方法、成员变量、成员方法。
1.构造方法
无论什么修饰符,子类都不能继承
2.成员变量
无论什么修饰符,子类都可以继承(但私有不可以之间调用,需要借助get和set)
3.成员方法
只有非私有才可以继承下来。(只有父类中的虚方法才能被子类继承)
继承中的语法知识点
继承中:成员变量的访问特点
就近原则:谁离得近,就用谁
(具体:先在局部位置找,本类成员位置找,父类成员位置找,逐级往上)
继承中:成员方法的访问特点
1、 直接调用就近原则:谁离得近,就用谁
2、super调用,直接访问父类
方法的重写:当父类的方法不满足子类需求,则进行方法重写
重写的书写格式:子类和父类一模一样的方法声明
(建议重写方法都在上面加上@Override,出现红色波浪线就是报错!)
(区分重载:方法头不同-参数个数不同,参数数据类型不同。
重写与重载共同点:方法名必须一致)
继承中:构造方法的访问特点
父类中的构造方法不会被子类继承。
子类中所有的构造方法默认先访问父类中的无参构造,在执行自己。
(解释:子类在初始化时,有可能会使用到父类中的数据,如果父类没有完成初始化,子类将无法使用父类数据,所以 子类初始化之前,一定要调用父类构造方法完成父类数据空间的初始化。)
那么,下面的问题就是如何调用父类构造方法呢?
*子类构造方法的第一行语句默认都是,super(),不写也存在,且必须在第一行。
*如果调用父类有参构造,必须手动写super进行调用。
this、super使用总结
this:理解为一个变量,表示当前方法调用者的地址
super:代表父类存储空间
其中,关于this(...),何时用:给一些数据默认值用此方式
(this 就是调用了本类其他构造方法)