一.类的继承
1.class aa extends AA这个就表示aa作为子类继承于父类AA。
2.当用一个子类继承一个父类时,它就会继承父类的所有属性和方法。
3.很多时候,子类的方法和父类中的方法不一样,子类可以写一个一模一样的方法来实现覆盖。
4.如果子类覆盖父类的构造方法后,想调用父类的方法时,可以用super.xx来调用。
相关例子:(包含内存模型)
相关代码 输出结果 内存模型二.基于继承关系的初始化顺序
1.基于继承关系的初始化顺序:
a.首先创建子类之前先创建父类
b.然后来创建类的静态成员
c.之后创建属性
d.最后调用构造函数
2.特别注意:
a.创建子类之前都会先创建父类,并且调用不带参数的构造函数创建父类。
b.如果父类没有不带参数的构造函数,创建子类就会报错。
c.解决问题的方法是:在子类中的每一个构造函数中通过super来手动指明构造函数。
相关例子:
相关代码 输出结果手动调用了一个父类的构造函数来构造父类
特别注意:不是使用super.xx而是直接通过super()来调用
关于构造方法的事,在继承中,因为子类可能用到父类中的数据,所以在子类构造方法的默认第一句都是系统自动添加父类的空参构造方法,如果父类中没有空参构造,就要显式的调用父类有参的构造方法,在创建子类对象之前,必须调用父类的构造方法对父类中的数据进行初始化。如果父类没有空参构造,而你又没有在子类中显式的调用父类的有参构造,这时就会报错。所以,子类构造方法必须显式调用父类的构造方法。
网友评论