gpt4 book ai didi

java - 这个奇怪的继承循环是什么?

转载 作者:行者123 更新时间:2023-11-30 05:51:51 25 4
gpt4 key购买 nike


我已经使用多态数组创建了一个基本的继承程序。从父类开始,这个数组被循环遍历,每个索引处的每个对象(从子类创建)都执行父类的实例方法。

作为实验,我在其父类类型的子类构造函数中创建了一个对象,并从那里执行了父类的实例方法。

由于我不知道的原因,这导致实例方法(从子类的构造函数中执行)执行次数与父类的多态数组的长度(如果多态数组有 5 个元素,子类的方法调用将执行 5 次)。


这是父类:

public class MyClass
{
// instance variables
protected String name;
protected String numStrings;

// constructor
public MyClass(String name)
{
this.name = name;
}

// instance method
public void getDescription()
{
System.out.println("The " + name + " has " + numStrings + " strings.");
}

// main method
public static void main(String[] args)
{
MyClass[] instruments = new MyClass[2];

instruments[0] = new Child("Ibanez bass guitar");
instruments[1] = new Child("Warwick fretless bass guitar");

for(int i = 0, len = instruments.length; i < len; i++)
{
instruments[i].getDescription();
}
} // end of main method
} // end of class MyClass


...这是子类:

public class Child extends MyClass
{
// constructor
public Child(String name)
{
super(name); // calling the parent-class' constructor
super.numStrings = "four";

MyClass obj = new MyClass("asdf");
obj.getDescription();
}
} // end of class Child


...这是输出:

The asdf has null strings.
The asdf has null strings.
The Ibanez bass guitar has four strings.
The Warwick fretless bass guitar has four strings.


最佳答案

有问题的行是这样的:

MyClass obj = new MyClass("asdf");

如果您只是简单地调用 getDescription() 而不是 obj.getDescription(),应该没问题。由于“Child”扩展了“MyClass”,因此 super 构造函数调用用于初始化父类(super class)中的所有内容(假设您现在可以将其想象为隐式 new MyClass("..."))您不必显式实例化“MyClass”。

关于java - 这个奇怪的继承循环是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12383552/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com