我正在使用Java:The Complete Reference这本书学习Java .目前我正在研究抽象类的主题.
请注意:stackoverflow上有类似的问题.我搜查了他们,但我无法理解这个概念.
如果我运行以下程序,它会产生正确的输出,但我不明白这个概念.
这里对Abstract类的引用变量有什么需求.我可以在没有抽象类的引用变量的情况下获得输出.
首先,我运行以下程序并获得所需的输出.
abstract class Figure {
double dim1;
double dim2;
Figure(double a, double b) {
dim1 = a;
dim2 = b;
}
// area is now an an abstract method
abstract double area();
}
class Rectangle extends Figure {
Rectangle(double a, double b) {
super(a, b);
}
// override area for rectangle
double area() {
System.out.println("Inside Area for Rectangle.");
return dim1 * dim2;
}
}
class Triangle extends Figure {
Triangle(double a, …
Run Code Online (Sandbox Code Playgroud) 我正在学习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:错误:非法字符:\ …