Java学习笔记(六) —— 基础知识篇
多态
extends或implements是多态性的前提。
使用格式:左父右子
父类名称 对象名 = new 子类名称();
接口名称 对象名 = new 实现类名称();
直接通过对象名访问成员变量:看创建对象时定义的类型,定义谁优先使用谁,没有则向上找。
直接通过成员方法访问成员变量,看方法属于谁,优先用谁,没有则向上找。
(因为子类可以重写方法,但不可以重写变量)
成员变量:“编译看左,运行看左”
成员方法:“编译看左,运行看右”
-
对象的向上转型,其实就是多态写法:右侧创建一个子类对象,把他当做父类来使用。向上转型一定是安全的。从小范围转成了大范围。(父类引用指向子类),对象一旦向上转为父类,那么就无法调用子类原本特有的内容。
-
对象的向下转型,其实是一个还原的动作。
格式:子类名称 对象名 = (子类名称)父类对象;
含义:将父类对象,还原成为本来的子类对象。
还原时必须保证对象与创建时的类型一致,否则报错。(ClassCastException)
if(animal instanceof Cat){//判断对象是不是一个类的实例
Cat cat = (Cat)animal;
}
final
- 可以用来修饰一个类:当前类不能有任何的子类。
- 可以用来修饰一个方法:当前方法为最终方法,不能被重写。
- 可以用来修饰一个局部变量:变量不能进行修改。只要保证唯一一次赋值即可。对于基本类型指的是数值不可变,而引用类型指地址不可变,但与引用类型中的内容不相关。
- 可以用来修饰一个成员变量:不可变,不给定默认值,必须手动赋值。要么直接赋值,要么通过(所有)构造方法赋值。
abstract和final不能同时使用,相互矛盾。
权限修饰符
public | protected | (default) | private | |
---|---|---|---|---|
同一个类 | YES | YES | YES | YES |
同一个包 | YES | YES | YES | NO |
不同包子类 | YES | YES | NO | NO |
不同包非子类 | YES | NO | NO | NO |