gpt4 book ai didi

java - 从 Java 中的基类访问子类字段

转载 作者:塔克拉玛干 更新时间:2023-11-01 21:31:28 24 4
gpt4 key购买 nike

我有一个名为 Geometry 的基类,其中存在一个子类 Sphere:

public class Geometry 
{
String shape_name;
String material;

public Geometry()
{
System.out.println("New geometric object created.");
}
}

和一个子类:

public class Sphere extends Geometry
{
Vector3d center;
double radius;

public Sphere(Vector3d coords, double radius, String sphere_name, String material)
{
this.center = coords;
this.radius = radius;
super.shape_name = sphere_name;
super.material = material;
}
}

我有一个包含所有 Geometry 对象的 ArrayList,我想遍历它以检查是否正确读取了文本文件中的数据。到目前为止,这是我的迭代器方法:

public static void check()
{
Iterator<Geometry> e = objects.iterator();
while (e.hasNext())
{
Geometry g = (Geometry) e.next();
if (g instanceof Sphere)
{
System.out.println(g.shape_name);
System.out.println(g.material);
}
}
}

如何访问并打印出球体的半径和中心场?提前致谢:)

最佳答案

如果你想访问子类的属性,你将不得不转换到子类。

if (g instanceof Sphere)
{
Sphere s = (Sphere) g;
System.out.println(s.radius);
....
}

不过,这并不是最面向对象的处理方式:一旦您拥有更多的 Geometry 子类,您将需要开始转换为这些类型中的每一个,这很快就会变得一团糟。如果你想打印一个对象的属性,你应该在你的 Geometry 对象上有一个名为 print() 的方法或类似的东西,它将打印对象中的每个属性。像这样:


class Geometry {
...
public void print() {
System.out.println(shape_name);
System.out.println(material);
}
}

class Shape extends Geometry {
...
public void print() {
System.out.println(radius);
System.out.println(center);
super.print();
}
}

这样,您就不需要进行转换,只需在 while 循环中调用 g.print() 即可。

关于java - 从 Java 中的基类访问子类字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4512312/

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