一、面向对象的三大特征
- 封装
-
概念
就是把属性方法放到一个类中,后面方便调用
-
- 继承
-
继承就是代码的复用,是子类复用父类的代码,父类是用不了子类的代码的
-
- 多态
二、继承
前面已经列举了面向对象的三大特征,这篇blog主要来讲一下什么是继承。
2.1 继承的概念
继承就是代码的复用,是子类复用父类的代码,父类是用不了子类的代码的.
父类是子类当中的共性
2.2 什么时候用继承
当类和类之间,存在相同的内容,并满足子类是父类中的一种,就可以考虑使用继承从而优化代码。
比如:
Person(姓名、年龄) | |
student(听课) | teacher(授课) |
2.3 继承方式
父类即类与类之间中的共性。
继承就是代码的复用,是子类复用父类的代码,父类是用不了子类的代码的
public class 子类 extends 父类
2.4 继承特点
-
Java只支持单继承,不支持多继承,但支持多层继承。
多层继承:子类A继承父类B,父类B可以继承父类C -
子类只能访问父类中非私有的成员
这里涉及到private关键字,也就是权限修饰符
private关键字
概念
- 是一个权限修饰符
- 可以修饰成员(成员变量和成员方法)
- 被private修饰的成员只能在本类中才能访问,在其它类就不能用了
同时,在private修饰的变量和成员当中,由set和get方法进行赋值和获取值
set:给成员变量赋值 get:对外提供成员变量的值
idea快捷键:alt+insert,然后选择setter and getter可以快速创建get和set方法以及相关变量
按住shift并点击最后一个或者ctrl+a全选即可一键创建全部set和get
2.5 子类到底可以继承父类中的哪些内容
2.5.1 构造方法
不管是否私有,都不可以继承
reason:被public修饰的类一定要和文件名一致,需要手动修改,直接用alt+insert直接创建更方便
2.5.2 成员变量
能继承但是不能用
2.5.3 成员方法
可以用虚方法表当中的
只有父类中的虚方法表才能被子类继承
虚方法即
- 非private
- 非static
- 非final
2.6 继承中的访问特点
2.6.1 成员变量的访问特点
就近原则:谁离我近我就用谁【适用于啥也不加】
super调用:直接访问父类,详情见图
2.6.2 成员方法的访问特点
直接调用满足就近原则:谁离我近,我就用谁
super调用,直接访问父类
先在本类中查看eat和drink方法,就会调用子类的,如果没有,就会调用父类继承下来的eat和drink方法
2.6.3 构造方法的访问特点
○父类中的构造方法不会被子类继承。
○子类中所有的构造方法默认先访问父类中的无参构造,再执行自己。
原因
子类在初始化的时候,有可能会使用到父类中的数据,如果父类没有完成初始化,子类将无法使用父类的数据。子类初始化之前,一定要调用父类构造方法先完成父类数据空间的初始化。
在执行子类之前,子类会先创建一个父类
三 成员变量和局部变量
成员变量:类中方法外的变量
局部变量:方法中的变量
区别
图片截图自黑马
四 方法的重写
当父类的方法不能满足子类现在的需求时,需要进行方法重写
如果发生了重写,子类中的虚方法会覆盖
书写格式
在继承体系中,子类出现了和父类中一模一样的方法声明,我们就称子类这个方法是重写的方法。
@Override重写注解
@Override是放在重写后的方法上,校验子类重写时语法是否正确。
加上注解后如果有红色波浪线,表示语法错误。
建议重写方法都加@Override注解,代码安全,优雅!
注意事项
1.重写方法的名称、形参列表必须与父类中的一致。
2.子类重写父类方法时,访问权限子类必须大于等于父类(暂时了解:空着不写<protected<public)
3.子类重写父类方法时,返回值类型子类必须小于等于父类
4.建议:重写的方法尽量和父类保持一致。
5.只有被添 加到虚方法表中的方法才能被重写
五 this和super使用总结
this:理解为一个变量,表示当前方法调用者的地址值:
super:代表父类存储空间。
this的内存原理
this的本质:代表方法调用者的地址值