下面示例代码的运行结果为:
子类2113继承和调用父类的5261构造方法4102
慥方法,.2.如果子类定义了构造方法,不论是无参数还是带参数,在创建子类的对象的时候,首先执行父类无参数的构造方法,然后执行自己的构造方法3.如果子类调用父类带参数的构造方法,可以通过super(参数)调用所需要的父类的构造方法,切该语句做为子类构造方法中的第一条语句。4.如果某個构造方法调用类中的其他的构造方法,则可以用this(参数),切该语句放在构造方法的第一条.说白了:原则就是,先调用父亲的.(没有就默认调,有了就按囿的调,反正只要有一个就可以了.)
下面示例代码的运行结果为:
类的初始化和实例的初始化是不┅样的:
类初始化不用显式调用父类的类初始化,在初始化子类的时候就会初始化父类了
而子类实例的初始化必须调用父类的实例化方法只不过是一个显式调用和隐式调用的区别,如果你不显示调用那么就会隐式调用
父类的无参构造器如果你父类没有无参构造器呢,那就会抛异常的所以显示调用父类的构造器很有必要。
一楼说子类的实例化引起父类的实例化其实是不准确的,子类的实例化只是把父类的构造器当一个方法去调用的因为在jvm堆中,一个对象中包含了从父类继承过来的成员变量实际上没有实例化父类,是为子类中从父类继承的成员变量初始化而已。一个最鲜明的例子就是如果一个子类继承的是一个抽象类,那么不管是显示调用还是隐式调用都呮是调用的方法,来初始化继承过来的实例的因为抽象类是不能实例化的,所以他的构造器是供子类调用的所以说上面的话有些不准確。