gpt4 book ai didi

java对象数组和继承

转载 作者:行者123 更新时间:2023-12-03 19:09:30 24 4
gpt4 key购买 nike

我有 3 个类,带有 main 方法的 MainClass,一个名为 AbstractClass 的抽象类和将用 AbstractClass 扩展的子类。

对象数组是在包含 1 个成员的 AbstractClass 类型的 main 方法中创建的。然后我将数组的第一个元素初始化为子类类型(这样可以吗?)。问题是我无法访问创建对象 ( array[0] ) 的 getDataToExport() 方法。我怀疑问题的发生是因为数组是 AbstractClass 类型......问题是:这甚至有可能实现吗?我想要做的是使用一个类型为 AbstractClass 的数组,并用由不同子类(在此代码中只是一个->子类)扩展的对象填充它 AbstractClass 但我无法获得该子类的方法。

有main方法的主类

public class MainClass {

public static void main() {

AbstractClass array[]=new AbstractClass[1];
array[0]= new Subclass(); // is this even allowed?
System.out.println(array[0].getDataToExport()); // Problem!

}

}

抽象类

public abstract class AbstractClass {

}

继承抽象类的子类

public class Subclass extends AbstractClass {

private int dataToExport;

public Subclass(){
this.dataToExport=2;
}

public int getDataToExport() {
return dataToExport;
}

}

最佳答案

AbstractClass array[]=new AbstractClass[1];array[0]= new Subclass(); // is this even allowed?

是的,这很好,但这意味着当您稍后使用它时,您只能访问 AbstractClass 中定义的内容(禁止使用强制转换,但您希望避免在任何地方使用强制转换你可以,这里不需要一个)。

制作类型为 AbstractClass 的数组条目的唯一真正原因是,如果您只想与该类中定义的成员进行交互。例如,在这种情况下,您可能希望将 getDataToExport 定义为抽象类中的抽象方法:

public abstract class AbstractClass {
public abstract int getDataToExport();
}

您还可以考虑使用接口(interface) 而不是抽象类。由于一个类只能从一个基类派生,但可以实现任意多个接口(interface),除非有大量的通用实现要放入抽象基类中,否则最好使用接口(interface)——因为它不会对该接口(interface)的实现施加不必要的限制。事实上,使用界面几乎总是更好;如果你愿意,你总是可以有一个抽象的基础。

例如:

public class MainClass {

public static void main() {

NiftyThingy array[]=new NiftyThingy[1];
array[0]= new NiftyThingyImplementation();
System.out.println(array[0].getDataToExport());

}

}

在哪里

public interface NiftyThingy {

public int getDataToExport();

}

public class NiftyThingyImplementation implements NiftyThingy {

public int getDataToExport() {
return /* ... the data ... */;
}

}

关于java对象数组和继承,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4134970/

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