类、超类、子类
super
- 不是对象的引用,只是指示译器调用超类方法的关键字
- this 引用隐式参数、调用该类其他构造方法;super 调用超类方法、调用超类构造器
多态
- 置换法则:超类对象可以替换成子类对象
- 对象变量多态:超类变量既可以引用超类对象,也可以引用子类对象
如:子类数组的引用可以直接转换成超类数组的引用,而不必强制类型转换
动态绑定
- 编译器查看对象的声明类型和方法名(签名)
- 编译器查看提供的参数类型
- 若为private、static、final方法,则为静态绑定
- 若依赖于隐式参数的类型,则为动态绑定。虚拟机为每个类创建一个方法表
- 重要特性:无需修改现有代码,即可扩展程序
- final类/方法:不允许继承,确保不会在子类中被重写而改变语义
抽象类
- abstract 可以不用实现方法
- 具有抽象方法的类应声明为抽象类
- 抽象类不能被实例化
Object:所有类的超类
- 只有基本类型不是对象
- equals可以判断两个对象是否具有相同引用
ArrayList
对象包装器与自动装箱
- 不可变,构造后不可改变值
- final,不能定义子类
反射
- 在运行中分析类的能力
- 在运行中查看对象
- 实现通用的数组操作
Class类
- Java运行时系统始终为所有对象维护一个被称为运行时的类型标识,保存这些信息的类为Class
- 将forName与newInstance配合,就可以根据存储在字符串中的类名创建一个对象
利用反射分析类
- Field、Method、Constructor分别描述类的域、方法和构造器
反射与泛型数组
- 首先获得a数组的类对象
- 确认它是一个数组
- 使用Class类的getComponentType方法确定数组对应的类型
调用任意方法
- 反射机制可以invoke调用Method中的任意方法,类似函数指针