继承的本质是避免重复

  • DRY(dont repeat youself)
  • extends
  • Java所有对象都继承了Object,拥有Object类的所有方法,比如:
    • equals()
    • toString()
  • Java类不支持多重继承

继承中的类结构与初始化顺序

实例方法的覆盖

  • @Override覆盖继承自父类的方法

设计模式:模板方法

  • 提供一个”模板“,实现可以覆盖模板的全部或者部分方法
  1. // 模板方法
  2. // override模板方法里某些方法,以达到修改行为的目的
  3. // 子类通过去覆盖writeBook里调用的方法,重新组合内容
  4. public class BookWriter {
  5. public void writeBook() {
  6. writeHeader();
  7. writeContent();
  8. writeFooter();
  9. }
  10. // ...
  11. }
  12. // 子类
  13. public class BookWriterChild {
  14. @Override
  15. public void writeContent() {
  16. // 里面也可以调用父类的方法
  17. super.writeContent();
  18. System.out.println("child content");
  19. }
  20. }

向上 & 向下转型

最顶端是Object

  • Integer -> Number -> Object
  • instanceof 判断
  • null instanceof 任何对象:永远都是false

    向上转型:任何子类都是父类的实例

  • 当你需要一个父类对象的时候,你都可以传递一个子类,反之则会类型不匹配

    向下转型:

  • 转型不安全的时候必须显式转型(Type)obj

final关键字&单例模式

  • final修饰常量
  • 地址不能被改写,是线程安全的

    1. final在方法上使用:禁止继承、覆盖、重写此方法

    2. final在类上使用:禁止继承此类

  • 继承提供了灵活性,但也埋下了隐患

  • String/Integer等类都是final的

JDK把一些常见的类设为final

  • Integer,String,Char等类型是final的,不可以被继承
    • 不会被破坏约定,方法不会被覆盖
    • 虚拟机可以进行一些激进的优化,提高性能