继承的实现Extends

  • 继承基于代码复用的思想,让我们更容易实现类的扩展extends
  • java中类只有单继承,无多继承(C++)
  • 类无多继承,但是接口可以多继承
  • 子类继承父类,可以得到父类的全部属性和方法(除了父类的构造方法),但不一定都可以直接访问(比如父类的私有属性和方法)
  • 如果定义一个类,没有调用extends,则它的父类是:java.lang.Object

    instanceof 操作符

  • 判断一个实例对象是不是一个类(及其父类)的实例对象

    override方法重写

  • 子类通过重写父类的方法,可以用自身行为替换父类的行为

  • 方法重写是实现多态的必要条件

    要点

  • “==”:方法名、形参列表相同

  • “<=”:返回值类型和声明异常类型,子类小于等于父类
  • “>=”:访问权限,子类大于等于父类

    final关键字

  • 修饰变量:被修饰变量不可变,一旦赋值,就无法重新赋值 final int MAX_SPEED = 120

  • 修饰方法:该方法不可以被子类重写。但是可以重载! final void study(){}
  • 修饰类:该类不能被继承,比如:Math、String等 fina class A{}

    组合Composition

  • 组合核心就是将父类对象作为子类的属性,然后子类通过调用这个属性来获得父类的属性和方法

  • 组合比继承灵活,继承只能有一个父类,但是组合可以有多个父类实例作为属性
  • 对于is-a的关系建议使用继承,has-a的关系建议使用组合

    老祖宗Object类

  • 重写toString和equals方法可以用idea 生成器

    super

  • super可以看作是直接父类对象

  • 可以通过super来访问父类中被子类覆盖的方法或属性

    注意点

  • 在一个类中,若是构造方法的第一行代码没有显式的用super()或者this();那么java默认都会调用super(),含义是调用父类的无参构造方法。这里的super()可以省略

  • 子类创建的整个过程只创建了一个对象
  • super的本质就是当前对象的父类型特征

    内存分析

  • 自动通过super调用父类无参构造方法,直到Object类

image.png

  • main方法结束前,堆中生成的子类实例包含所有父类的特征

image.png