继承的实现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()或者this();那么java默认都会调用super(),含义是调用父类的无参构造方法。这里的super()可以省略
- 子类创建的整个过程只创建了一个对象
-
内存分析
自动通过super调用父类无参构造方法,直到Object类
- main方法结束前,堆中生成的子类实例包含所有父类的特征