我正在学习Java(和OOP)并且无法理解为什么我的课程表现不像我期望的那样。我有一个超类' MyFirstJavaClass'和一个子类'测试'它扩展了MyFirstJavaClass。 MyFirstJavaClass有三个给定公共访问的成员变量。那些是int x,y和z。 MyFirstJavaClass中唯一的构造函数需要三个参数来初始化其成员变量。子类Test还实现了一个构造函数,它带有三个参数来初始化它的继承成员(x,y和z)和一个它定义的meber变量(特定于int)。这是代码:
MyFirstJavaClass:
class MyFirstJavaClass {
int x, y, z;
MyFirstJavaClass(int a, int b, int c) {
System.out.println("Hey! I am the superclass constructor");
x = a;
y = b;
z = c;
}
public static void main(String args[]) {
Test t = new Test(12, 25, 37);
}
}
测试:
class Test extends MyFirstJavaClass {
int specific;
Test(int a, int b, int c)
{
super(a, b, c);
System.out.println("Hey! I am the subclass constructor");
specific = 79;
}
}
令我困惑的是,MyFirstJavaClass构造函数中的输出语句未被执行。我希望它能输出如下内容:
Hey! I am the superclass constructor
Hey! I am the subclass constructor
但我得到的是:
Hey! I am the subclass constructor
我确信调用了超类构造函数,因为它将继承的变量初始化为创建Test对象时指定的值。为什么输出语句没有执行?
可能存在一些错误导致编译时间错误,因为我在手机上输入了这个问题。我确信我原来的课程没有任何错误。
答案 0 :(得分:0)
正如评论中暗示的那样,您的问题不是由于编码本身:您的“预期”标准结果在发生的事情方面是正确的。第一个打印声明在某处/某种程度上丢失了。最有可能的是你没有正确地将这些类包装在一起。
您发布的代码与正在运行的代码之间存在脱节 - 您可能需要找出包装无法正常工作的原因。你可以从:
开始用(b)你会看到为什么执行的代码不符合预期
答案 1 :(得分:0)
我认为问题是你如何为Test类制作对象。
从头等舱中删除main()
。
创建一个不扩展任何类的第三个类。
在该类中创建一个main()
方法,然后在该方法中为Test
类创建一个对象。
现在运行代码。
希望这会有所帮助:)
答案 2 :(得分:-1)
我尝试在我的eclipse IDE上运行你的代码。代码工作正常并显示:
Hey! I am the superclass constructor
Hey! I am the subclass constructor
逻辑很好。确保为您的课程提供正确的包裹名称。
答案 3 :(得分:-1)
您的代码在我的IDE中执行。代码没有问题。