目录
匿名对象
new Person();
使用:
1*new Person().属性
2*new Person().方法
场景:
只使用一次,
错误操作
new Person().name = "zs";
sout(new Person().name);
new对象都会开辟新的空间
继承
继承基于封装
引出
开发了两个类 Dog Cat
问题
两个类中存在大量的属性和方法的重置
解决方法
将重复的代码抽取到了Animal类中
Dog Cat继承自Animal类 从而复用父类中的属性和方法
概念
将多个中重复的属性和方法提取到另一个类中,提取出来的类,就可以称之为父类(超类 基类)
之前的类称为子类(派生类);之前的类可以通过继承来将父类的属性和方法继承过来进行复用
格式
父类: 没有特殊标识
子类:
权限修饰符 class 子类类名 extends 父类类名{}
extends是关键字
特点:
子类继承父类,可以将父类中的属性和方法继承过来,直接使用
父类的私有属性和私有方法虽然子类可以继承,但是不可见
子类无法继承父类的构造方法
Java类是单继承
单继承
优点
结构简单清晰明了
缺点
复用性略低
多继承
优点
代码复用性会更高一些
缺点
可能会出现冲突 结构发生混乱
注意
创建子类对象之前会先创建父类对象
方法重写 OverRide
子类从父类继承过来的方法不满足子类的需求,此时子类可以在子类中重写该方法
子类方法签名 和父类方法签名完全一致
方法签名 : 方法名+参数列表
@Override注解 检查当前方法是否满足方法重写的要求
方法重写的五大原则
两等两小一大
两等
1*子类方法签名和父类方法签名要完全一致
2*如果父类方法的返回值类型为基本数据类型,void, 则子类重写的方法的返回值类型需和父类一致
一大
子类方法的权限修饰符必须大于或等于父类的权限修饰符
两小
1*如果父类方法的返回值类型为引用数据类型,则子类中重谢的方法返回值数据类型小于或等于父类的返回值类型
2*如果父类方法抛出异常 则要求子类重写方法抛出异常类型要小于或等于父类的异常类型
权限修饰符
限制程序的访问权限
分类
public > protected > 默认(default friendly) > private
public 公共的
protected 被保护的
默认 : 不写修饰符
private : 私有的
外部类可以被public,默认修饰
方法重写和方法重载
1*含义
重载: 方法名相同 参数列表不同
重写: 方法名相同 参数列表不同
2*范围
重载: 同一个类中
重写: 在子父类
3*方法
重载: overload
重写: Override
4*使用场景
重载: 功能丰富
重写: 完成子类特有的需求
super关键字
this--当前对象
super--父类对象
应用场景:
super();---super语句 调用父类的无参构造
super.--父类方法
super():
注意
1*子类的构造方法中默认会在第一行加super();调用父类的无参构造先创建父类对象
2*super语句也必须放在首行
3*this语句和super语句不能同时使用
创建子类对象上会调用父类的构造方法先创建父类
NullPointerException空指针异常
当对象为null时,调用了对象的属性或方法就会抛出空指针异常
基于子父类继承的执行顺序
1*子父类 构造代码块 构造方法
先父后子
2*单独类 成员属性 构造代码块 构造方法
成员属性 构造代码块 在构造方法之前执行
成员属性,构造代码块的顺序取决于位置,在前的先执行
3*基于子父类 成员属性 构造代码块 构造方法
先父后子
父类的成员属性,构造代码块,构造方法
再子类的 成员属性,构造代码块,构造方法
继承优点
1*提高代码得到复用性
2*突出了程序的结构特征
3*提高了代码的可维护性
多态
基于封装和继承实现的
概念:
体现多种形态
分类:
编译时多态
方法重载
编译期间可以根据实参的数据类型以及参数个数,顺序等来确定调用哪一个重载
运行时多态
方法重写+向上造型
向上造型
将子类对象赋值给父类类型的引用
注意:
1*向上造型中,无法通过父类类型来访问子类所特有的属性和方法
编译看左边的类型,运行看右边
优点:
程序更加灵活
提高程序的可扩展性