zay*_*ynv 3 java constructor class subclass
我无法理解使用带子类的构造函数的概念.
这是父类:
public class A
{
    public A()
    {
        System.out.println("The default constructor of A is invoked");
    }
}
儿童班:
public class B extends A
{
    public B(String s)
    {
        System.out.println(s);
    }
}
而我的主要方法是:
public class C
{
    public static void main (String[] args)
    {
        B b = new B("The constructor of B is invoked");
    }
}
当我运行C时,我得到的输出是
调用A的默认构造函数
调用B的构造函数
我不明白为什么来自A类的消息正在输出.因为你将一个字符串参数传递给B类的构造函数,它不应该只打印出来吗?换句话说,输出不应该只是:
调用B的构造函数
在此先感谢,我真的很感谢你们给予的任何帮助.
来自文档
如果构造函数未显式调用超类构造函数,则Java编译器会自动插入对超类的无参数构造函数的调用.如果超类没有无参数构造函数,则会出现编译时错误.对象确实有这样的构造函数,因此如果Object是唯一的超类,则没有问题.
因此,即使您没有显式调用超类构造函数,编译器也会插入super()在类的构造函数中调用的语句B.
这就是B类构造函数在编译后的样子.
public B(String s){
    super(); // this is inserted by the compiler, if you hadn't done it yourself.
    System.out.println(s);
}
| 归档时间: | 
 | 
| 查看次数: | 127 次 | 
| 最近记录: |