为什么超类构造函数中的所有语句都没有被执行?

时间:2016-05-29 05:48:57

标签: java oop inheritance

我正在学习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对象时指定的值。为什么输出语句没有执行?

可能存在一些错误导致编译时间错误,因为我在手机上输入了这个问题。我确信我原来的课程没有任何错误。

4 个答案:

答案 0 :(得分:0)

正如评论中暗示的那样,您的问题不是由于编码本身:您的“预期”标准结果在发生的事情方面是正确的。第一个打印声明在某处/某种程度上丢失了。最有可能的是你没有正确地将这些类包装在一起。

您发布的代码与正在运行的代码之间存在脱节 - 您可能需要找出包装无法正常工作的原因。你可以从:

开始
  • (a)进行全面清理/重建和
  • (b)逐步调试。

用(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中执行。代码没有问题。