什么是继承?
对于继承的理解:在定义类的时候,从代码设计角度考虑:如果多个类中出现相同的成员变量和成员方法,将这些类中共有的内容向上抽取,放到父类中,让这些子类去继承父类;这样子类中就不需要去定义共有的内容,继承父类之后,子类就可以直接使用父类中非私有的成员,让代码变得更加简洁;
继承更加贴近于代码的设计理念,就是代码的设计思想,当我们在设计代码的时候,在实际开发中,当设计思路熟悉之后,一定是先定义父类,然后定义子类继承父类,直接使用父类中的成员;
子类继承父类可以继承父类中所有的成员,但是只能使用父类中非私有成员,对于父类构造方法是否会继承这个问题,其实不需要去考虑,如果非要说,就是不会继承;
如何使用继承?
标准流程
1、定义一个父类,在其中定义重复性的代码
2、定义一个子类继承父类 -> 子类 extends 父类
3、创建子类对象,直接使用父类中非私有成员
继承中,成员变量和成员方法的访问特点
总结:
继承体系下,成员变量访问特点:看等号左边是谁,先调用谁中的成员变量,子类没有,找父类
继承体系下,成员方法访问特点:看new的是谁,先调用谁中的成员方法,子类没有,找父类
重点:上面两句话,同样适用于多态
方法的重写
概述:子类中有一个和父类方法名以及参数列表相同的方法
前提:继承
访问:看new的是谁,先调用谁中的,如果new的是子类,调用调用子类重写的方法,子类没有,找父类
检测是否为重写方法:在该方法上写@Override注解
补充:继承前提下,如何判断子类中某个方法是重写的父类方法?
方式一:直接使用@Override注解,如果不报错,就是重写
方式二:理论基础:从方法名和形参列表这两个角度去判断两个方法是否相同,如果相同就是重写
注意事项
1、子类重写父类方法之后,权限必须要保证大于等于父类权限(权限指的是访问权限)
public -> protected -> 默认 -> private
2、子类方法重写父类方法,方法名和参数列表要一样
3、私有方法不能被重写,构造方法不能被重写,静态方法不能被重写
4、子类重写父类方法之后,返回值类型应该是父类方法返回值类型的相同类型或子类类型
补充:私有方法不会被重写:继承不会打破封装性;构造方法不会被重写:重写的前提是继承,对于构造方法而言,不会去考虑它是否会被继承;静态方法不会被重写:静态方法属于类级别的
使用场景
使用场景:功能升级改造,子类需要对父类中已经实现好的功能进行重新改造