我有一个名为 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);
....
}
但是,这并不是最OO的处理方式:一旦拥有更多的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切换到Kotlin。但我有很多遗留代码和第三方库。我看到,Java类中经常存在没有getter和setter的公共字段,这些字段必须从其他类访问。如果没有Kotlin代码中的getter,我如何访问Java类的公共字段?
我理解您可以从派生类访问基类的成员,然而,我有一个函数需要指向我的基类作为一个整体的指针。例如: 有没有办法从派生类中获得指向这个基类的指针?
我的子类是,我需要在我的超类中使用字段和。我知道如何在子类中使用超类变量,但我必须学会如何做相反的事情?谢谢。
我在ReactJS中得到了一个子类和一个父类。我想让我的孩子访问父级的状态,这是每毫秒更新一次。孩子也应该有可能接触到一些父母的方法。 在另一个类中,我正在初始化一个子对象并对其调用Function startManager()。但随后我收到一条错误消息,说无法读取未定义的属性“start”。我是一个新的反应者,我认为我在定义孩子的属性时犯了一些错误。有人知道我做错了什么吗。谢谢
我正在阅读这本Java SCJP的书,我偶然发现了以下内容: 但是我得到了这个错误: 那么,出什么问题了?
我有一个场景,下面是超类:- 我正在使用每子类表策略使用一个鉴别器下面是容器的hbm映射:- 下面是FieldParent的hbm映射:- java.sql.SqlSyntaxerRoreXception:ora-00904:“FieldParent1_3_”.“TypeOFSub”:无效标识符