我把这段代码放在编译器中
package com.employer.constractor;
public class ConstractorDemo extends A{
public ConstractorDemo(){
System.out.print("Demo");
}
public static void main(String[] args){
new ConstractorDemo();
}
}
class A {
A(){
System.out.print("A");
}
}
它给了“ADemo” 的为什么吗 我会很感激这个案子的任何详细答案 并提及编译器将如何处理该
答案 0 :(得分:2)
基类的构造函数(在您的情况下为类A
)始终在您要实例化的类的构造函数之前执行(在您的情况下为类ConstractorDemo
)。这就是A
之前打印Demo
的原因。
这个构造函数:
public ConstractorDemo(){
System.out.print("Demo");
}
相当于:
public ConstractorDemo(){
super (); // prints A
System.out.print("Demo"); // prints Demo
}
答案 1 :(得分:2)
当你调用子构造函数时,它会自动将调用链接到它的所有超类,直到链到达Object类。
虽然你没有调用调用超类构造函数并不意味着你只是单独执行Child类构造函数。有一个有趣的事实是,你的超类构造函数(直到第n个超类,它是Object类构造函数)也会在该进程中调用(在代码中显示)。您可以在调用任何子构造函数时观察。从当前类中对直接父类构造函数进行链调用。并且调用将继续,直到Object类构造函数调用,因为可能的大多数父类是超类。
拇指规则
答案 2 :(得分:2)
首先调用子构造函数 。子构造函数中的第一行将是对super的调用。它给你一个错觉,即父母将首先被调用。但实际上,子类的构造函数调用父类的构造函数
答案 3 :(得分:0)
基类构造函数始终在类Level Constructor之前执行。它自动调用super
类。因此,首先A
将根据您的示例在Demo
之后打印。谢谢
答案 4 :(得分:0)
每当调用子类的构造函数时,其中的第一个默认语句是super();由编译器自动添加,
超级();将调用超类的构造函数,首先它将执行A()然后执行ConstractorDemo()
请参阅:https://www.javatpoint.com/super-keyword
即使你想指定super();它需要是你的构造函数的第一个语句,否则它会给你编译时错误!
您的构造函数是这样的:
public ConstractorDemo()
{
super(); // u didn't specified this but compiler will automatically add it
System.out.print("Demo");
}