构造函数 C 子类调用父类构造函数?
C 子类调用父类构造函数?
使用底座。在子类中,调用的类型必须与父类的类型相同。否则,将出现错误。Class a{public a(int a,int b){}}}Class b:a{public b(int a,int b,int x,int y):base(a,b){}
例如,如果父类的构造函数有参数,子类的构造函数中的第一句话是super(…)注意:调用子类构造函数时,会先调用父类构造函数,然后调用子类构造函数。如果要调用父类而不是子类的成员,可以:super。不创建父类的实例。如果你能创建一个父类的实例,我可以举一个反例来说明这是错误的:当父类是抽象类而子类不是抽象类时,子类在调用构造函数时也会调用父类构造函数,创建子类和父类的两个实例。但是,抽象类不能实例化。原来的假设是错误的。因此,父类不会被创建为实例。理论理解:当用构造函数添加new时,会创建一个对象(实例)。调用子类构造函数时,调用父类构造函数是初始化子类从父类继承的部分。此过程不对父类使用new,因此不会为父类创建对象(实例)。
子类调用父类的构造函数有什么用?
未创建父类对象,但调用了父类的构造函数。构造函数只是一个成员方法,没有什么特别之处。
如果查看字节码,新建和调用构造函数是两个步骤。Java create object是new,call constructor是invokespecial<init>。这里还可以看到,在调用构造函数时,您已经有了一个对象(new),因此调用构造函数并不意味着创建一个新对象。
很多人误解了这一点。还有这个。转到其他对象。但是,如果您查看字节码,它们实际上是对象的引用,但是类的名称不同。说白了,字节码中没有this和super关键字。如果是成员方法,则需要使用this或super,两者都是0。
当然,这只是一个字节码,与真正的虚拟机执行的最终代码不同,但逻辑是这样的,这并不妨碍我们理解它是如何工作的。
我读了其他朋友的答案。如果您想根据父类对象的创建来理解它,没有大问题。从逻辑上讲,我们可以认为那里有一个父类对象,并且内存中有父类的成员。
版权声明:本文内容由互联网用户自发贡献,本站不承担相关法律责任.如有侵权/违法内容,本站将立刻删除。