spa*_*key -4 java inheritance constructor
我正在学习java编程.我尝试运行以下程序时收到编译错误.
public class Animal {
public Animal() {
System.out.println(“Making an Animal”);
}
}
public class Hippo extends Animal {
public Hippo() {
System.out.println(“Making a Hippo”);
}
}
public class TestHippo {
public static void main (String[] args) {
System.out.println(“Starting...”);
Hippo h = new Hippo();
}
}
Run Code Online (Sandbox Code Playgroud)
根据我的理解,如果这个程序运行没有错误,它将打印
开始...
制作河马
但在"Head First Java"一书中,他们提到了该程序的输出
开始...
制作动物
制作河马
这个输出怎么可能?我没有调用超类构造函数,但是如何在这里打印"制作动物".
任何人都可以解释这背后的逻辑吗?
如果我们调用子类构造函数,它的超类constrtuctor是否也被执行?
还有为什么我得到编译错误,我使用在线IDE来测试基本的java程序.
错误详情
编译错误注释(0)stdin copy标准输入为空编译信息Main.java:3:错误:非法字符:\ 8220 System.out.println(?制作动物?); ^ Main.java:3:错误:';' 期望System.out.println(?制作动物?); ^ Main.java:3:错误:非法字符:\ 8221 System.out.println(?制作动物?); ^ Main.java:8:错误:非法字符:\ 8220 System.out.println(?制作河马?); ^ Main.java:8:错误:';' 期待System.out.println(?制作河马?); ^ Main.java:8:错误:非法字符:\ 8221 System.out.println(?制作河马?); ^ Main.java:13:错误:非法字符:\ 8220 System.out.println(?正在启动......?); ^ Main.java:13:错误:';' 期望System.out.println(?正在开始......?); ^ Main.java:13:错误:非法启动表达式System.out.println(?正在启动......?); ^ Main.java:13:错误:非法字符:\ 8221 System.out.println(?正在启动...?); ^ Main.java:13:错误:非法启动表达式System.out.println(?正在启动......?); ^ 11错误
来自doc
注意:如果构造函数未显式调用超类构造函数,则Java编译器会自动插入对超类的无参数构造函数的调用.如果超类没有无参数构造函数,则会出现编译时错误.对象确实有这样的构造函数,因此如果Object是唯一的超类,则没有问题.
所以当你没有明确调用时super(),le编译器会为你插入它.相当于
public class Hippo extends Animal {
public Hippo() {
super()
System.out.println(“Making a Hippo”);
}
}
Run Code Online (Sandbox Code Playgroud)
编辑:正如克里斯所指出的,堆栈跟踪报告的问题来自您使用的错误引号.
它应该是
" "
Run Code Online (Sandbox Code Playgroud)
代替
“ ”
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
186 次 |
| 最近记录: |