【发布时间】:2013-12-12 20:14:25
【问题描述】:
嗨,我是 Ankur,已经使用 java 编码好几年了。我之前读过 Herbert Schildt 的 Head first Java The Complete Reference,最近我在 Oracle docs 的这个页面中遇到了一个重大谬误。注释部分说如果构造函数没有显式调用超类构造函数,Java 编译器会自动插入对超类的无参数构造函数的调用。如果超类没有无参数构造函数,则会出现编译时错误。 Object 确实有这样的构造函数,所以如果 Object 是唯一的超类,则没有问题。但是,如果我明确地没有在超类中提及默认构造函数,我仍然不会收到错误!我从未在提到的任何一本书中找到这样的信息!!事实上,我可以轻松地运行一个展示构造函数链接的程序,而无需提供默认值超类构造函数!!代码如下:
import java.io.*;
import java.util.*;
class student
{
// student()
//{
//System.out.println("I am student\n");
// }
public void subjects()
{
System.out.println("English..");
}
}
class engineering extends student
{
engineering()
{
System.out.println("I am an engineer..\n");
}
public void subjects()
{
System.out.println("Maths");
}
}
class computer extends engineering
{
computer()
{
System.out.println("I am a computer engineer.");
}
public void subjects()
{
System.out.println("Computer");
}
}
class test8
{
public static void main(String args[])
{
computer cs=new computer();
}
}
在上面的代码中,如果我使用注释的代码块运行它,构造函数链接通常会发生。首先,student() 构造函数运行,然后是 engineering(),然后是 computer()。但是当我删除默认构造函数时基类student(),它仍然成功运行..oracle docs中的参数不是在构造函数链接期间必须在超类中提供默认构造函数错误还是我对oracle docs中这一部分的理解错误?请帮我解决这种不一致! 谢谢!
【问题讨论】:
-
请正确缩进并使用Java命名约定,类名以大写开头。
-
你会在SO post得到答案
标签: java