17-21(继承和多态)
- 构造方法不能显示的调用,(不能用对象.构造方法形式调用),如果要在构造方法中调用另一个构造方法,用this(参数或无参),放在第一行
- 实例化子类对象的时候,先去调用父类的构造方法,先生成父类对象,紧接着生成子类对象,返回 指向子类对象的地址!
- 关于继承的三点:父类有的,子类也有;父类没有的,子类可以增加;父类有的子类可以改变。
- 关于继承需要注意的:
-
- 构造方法不能被继承
- 方法和属性可以被继承
- 子类的构造方法隐式的调用父类的不带参数的构造方法
- 当父类没有不带参数的构造方法时,子类需要使用super来显式地调用父类的构造方法,super指的是对父类的引用
- super关键字必须是构造方法中的第一行语句
- 多态建立在封装和继承之上,就是父类类型指向子类对象,一个引用是什么类型要看左边(声明引用的类型)用一句话表示就是:父类型的引用可以指向子类的对象!这句话建立在一个条件上就是子类就是父类(子类继承了父类)!
- 重载是一个早绑定的!其实他不是多态,多态都是晚绑定的!
- 多态向下类型转化的原则是,父引用指向的是谁就能强制转换成谁!指向猫的动物引用,强转成狗,会编译通过,但是会报运行时转换异常,因为在编译时,引用是父引用可以强转任何子类,但是运行时就会转换异常!
- 把父类对象(父类引用指向父类对象)强转子类会运行时会异常,原则:指向谁才能转成谁