多态
-
什么是多态?
同类型的对象,表现出的不同形态
-
多态的表现形式
父类类型 对象名称 = 子类对象 【例:fu f = new zi()】
-
多态的前提
有继承/实现关系;
有父类引用指向子类对象 【例:fu f = new zi()即父类fu指向子类对象zi】
有方法重写
-
多态的好处
使用父类型作为参数,可以接收所有子类对象,体现多态的扩展性与便利
-
多态的弊端
不能使用子类的特有功能
-
引用数据类型的类型转换的方式
自动类型转换、强制类型转换
-
强制类型转换能解决的问题
可以转换真正的子类类型,从而调用子类的独有功能
转换类型与真实对象类型不一致会报错
转换的时候有instanceof关键字进行判断
-
多态调用成员的特点
(1)变量调用:编译看左边,运行也看左边
编译看左边:javac编译代码时,会看左边的父类中有没有这个变量,如果有,编译成功;没有则编译失败。
运行看左边:java运行代码时,实际获取的就是左边父类中成员变量的值
(2)方法调用:编译看左边,运行看右边
编译看左边:javac编译代码时,会看左边的父类中有没有这个方法,如果有,编译成功;没有则编译失败。
运行看右边:java运行代码时,实际上运行的是子类中的方法(虚方法表中与父类方法相同的已被子类方法覆盖)
重写
-
方法的重写
当父类的方法不能满足子类现在的需求时,需要进行方法重写
-
书写格式
在继承体系中,子类出现了和父类中一模一样的方法声明,就称子类这个方法是重写的方法
-
@override重写注释
1、@override是放在重写后的方法上,校验子类重写时语法是否正确
2、加上注释后如果有红色波浪线,表示语法错误
3、建议重写方法都加@override注释
包
-
什么包?
包名 + 类名
-
包的作用
包就是文件夹,用来管理不同功能的Java类
-
包命名的规则
公司域名反写 + 包的作用,需要全部英文小写,见名知意
-
什么时候需要导包?什么时候不需要导包?
- 使用同一个包中的类时,不需要导包
- 使用java.lang包中的类时,不需要导包
- 其他情况都需要导包
- 如果同时使用两个包中的同名类,需要用全类名
final
- final方法
表明该方法是最终方法,不能被重写
- final类
表明该类是最终类,不能被继承
- final变量
叫做常量,只能被赋值一次
final修饰的变量是基本类型:变量存储的数据值不能发生改变;
final修饰的变量是引用类型:变量存储的地址值不能发生改变,对象内部的可以改变
代码块
-
静态代码块
static{}
(如定义在main方法前,对用户信息初始化用于登录操作时可以使用)
-
代码块的分类
局部代码块、构造代码块、静态代码块
-
局部代码块的作用
提前结束变量的生命周期(已淘汰)
-
构造代码块的作用
抽取构造方法中的重复代码(不够灵活)
-
静态代码块的作用
数据的初始化