*继承:
概述:
继承是面向对象三大特征之一。可以使得子类具有父类的属性和方法,
还可以在子类中重新定义,追加属性和方法。
格式:
public class 子类名 extends 父类名{}
父类也被称为基类或者超类,子类也被称为派生类。
特点:
①子类可以有父类的内容
②子类还可以有自己特有的内容
好处:
提高代码复用性和维护性
弊端:
继承让类与类之间产生了关系,类的耦合性增强了。
当父类发生变化时子类实现也不得不跟着变化,削弱了子类的
独立性
什么时候用继承:
继承体现关系是: is a ,即什么是什么的关系,一般都是数学的包含关系
继承中变量的访问特点:
①使用成员变量在成员方法输出优先级:
方法体内的局部变量 > 方法体本类的成员变量 > 方法体本类继承的父类的成员变量
super(关键字):
① 代表父类存储空间的表示(可以理解为对象引用,对象引用可以理解为就是对象名)
访问构造方法:
关键字(...)
访问成员方法:
关键字.成员方法(...)
继承中构造方法的访问特点:
①优先级:
当测试类创建子类对象时,会先输出父类的无参构造方法的内容再输出子类(无参或者有参)构造方法的内容
*子类中所有的构造方法默认都会访问父类中的无参的构造方法
原因:
①因为子类会继承父类中的数据,可能还会使用父类的数据。
所以,*子类初始化(完成)之前,一定要先完成父类数据的初始化
先有父亲后有儿子
②每一个子类构造方法的第一条(隐藏)语句默认都是:super()
③父类必须有无参构造方法,否则需要在子类的构造方法中的默认super()语句
括号内加入参数,形成父类对象引用带参构造
继承中成员方法的访问特点:
①优先级:
成员方法的使用,先看子类有没有,子类没有再去父类找
子类成员方法 > 父类成员方法
可以在方法第一句写super.方法名();;来反过来
*初始化补充:
可以理解为先执行构造方法,然后赋值给对象
Java隐藏了指针这个说法 但是如果你使用了一个没有赋值 就是没有初始化的对象 他就会报错空指针
初始化的时候会先给一个临时默认值防止空指针异常,然后再看成员变量有没有赋值,如果有则变为成员变量的值
如果没有则临时默认值就会成为最终初始化中的赋值
方法重写:
概述:
子类中出现了和父类中一模一样的方法声明(可以重写内容)
注意:
①注解 @Override 可以检验重写的方法的声明是否一致
②父类私有private方法子类不可能重写,否则就是重新定义一个子类的私有方法
③表面父类私有private成员子类是可以继承的,但不能直接使用,然后父类私有的成分不能被继承包括构造和成员方法
*但实际上子类没有继承父类的私有变量,而是继承了get/set方法 ,再然后改变和获取私有变量的值
④父类方法如果是没有修饰符即默认修饰符,子类重写默认修饰符方法也可,public也可
访问权限大小:public > 默认 > 私有private
即子类重写的方法的访问权限不能比父类方法的访问权限低
Java中继承的注意事项:
①不能同时继承多个类,只能继承一个类
②可以多层继承 Son extends Father{},Father extends Granddad{}