Java学习笔记(六) —— 基础知识篇


多态

extends或implements是多态性的前提。

使用格式:左父右子

父类名称 对象名 = new 子类名称();

接口名称 对象名 = new 实现类名称();

直接通过对象名访问成员变量:看创建对象时定义的类型,定义谁优先使用谁,没有则向上找。

直接通过成员方法访问成员变量,看方法属于谁,优先用谁,没有则向上找。

(因为子类可以重写方法,但不可以重写变量)

成员变量:“编译看左,运行看左”

成员方法:“编译看左,运行看右”

  1. 对象的向上转型,其实就是多态写法:右侧创建一个子类对象,把他当做父类来使用。向上转型一定是安全的。从小范围转成了大范围。(父类引用指向子类),对象一旦向上转为父类,那么就无法调用子类原本特有的内容。

  2. 对象的向下转型,其实是一个还原的动作。

    格式:子类名称 对象名 = (子类名称)父类对象;

    含义:将父类对象,还原成为本来的子类对象。

    还原时必须保证对象与创建时的类型一致,否则报错。(ClassCastException)

if(animal instanceof Cat){//判断对象是不是一个类的实例
    Cat cat = (Cat)animal;
}

final

  1. 可以用来修饰一个类:当前类不能有任何的子类。
  2. 可以用来修饰一个方法:当前方法为最终方法,不能被重写。
  3. 可以用来修饰一个局部变量:变量不能进行修改。只要保证唯一一次赋值即可。对于基本类型指的是数值不可变,而引用类型指地址不可变,但与引用类型中的内容不相关。
  4. 可以用来修饰一个成员变量:不可变,不给定默认值,必须手动赋值。要么直接赋值,要么通过(所有)构造方法赋值。

abstract和final不能同时使用,相互矛盾。

权限修饰符

public protected (default) private
同一个类 YES YES YES YES
同一个包 YES YES YES NO
不同包子类 YES YES NO NO
不同包非子类 YES NO NO NO