继承:是面向对象编程的一种代码复用方式,Student可以从Person继承 继承关键词extends Student获得了Person的所有功能 Student只需编写新增的功能 Java只允许单继承
Person:超类(super),父类,基类 Student:子类(subclass),扩展名
继承树:Java只允许class继承自一个类,一个类有且仅有一个父类(Object除外)
Object<-Person<-Student-Teacher
Person类定义的private字段无法被子类访问 protected修饰的字段可以被子类访问 protected把字段和方法的访问权限控制在继承树内部
super:super关键字表示父类(超类) 构造方法的第一行语句必须调用super()
没有super()时编译器会自动生成super() 如果父类没有默认构造方法,子类必须显示调用super()
向上转型:可以对实例变量进行向上转型(upcasting),把一个子类类型安全的变为更加抽象的类型
向下转型:可以对实例变量进行向下转型(downcasting) 向下转型把抽象的类型变成一个具体的子类型 向下转型很可能报错:ClassCastException
instanceof可以判断类型
与组合区别:Student不宜从Book继承 Student可以持有一个Book实例 继承是is关系 组合是has关系
多态:Override,子类覆写父类的方法是覆写(Override) 方法签名如果不同就不是Override,而是创建了一个新方法 加上@Override可以让编译器帮助检查是否进行了正确的覆写 @Override不是必须的 引用类型的声明类型与实际类型不符 多态:Java的实例方法调用是基于运行时实际类型的动态调用 实际对象的方法调用总是对应实际类型
定义方法:toString:把instance输出为String equals:判断两个instance是否逻辑相等 hashCode:计算一个instance的哈希值
final修饰的方法可以阻止被覆写 final修饰的class可以阻止被继承 final修饰的field必须在创建对象时初始化