gpt4 book ai didi

java - 将一个对象转换为它的最低类

转载 作者:塔克拉玛干 更新时间:2023-11-01 23:02:38 27 4
gpt4 key购买 nike

有没有办法将对象转换为它的“最低”类?在我的例子中,“Arc”和“Line”扩展了“Curve”。我想将两者都保存在 ArrayList 中,然后根据它们是什么类对它们进行处理。此示例输出“曲线”、“曲线”,但我希望它是“弧”、“线”。感谢您的帮助!

public class Test4 {

public static void main(String[] args) {
ArrayList<Curve> curves = new ArrayList<>();
Arc arc = new Arc(new Point(0, 0, 0), 0, 0, 0);
Line line = new Line(new Point(0, 0, 0), new Point(1, 0, 0));
curves.add(arc);
curves.add(line);

for (Curve i : curves) {
test(i);
}
}

public static void test(Line l) {
System.out.println("line");
}

public static void test(Arc a) {
System.out.println("arc");
}

public static void test(Curve c) {
System.out.println("curve");
}
}

编辑:感谢您的回答!到目前为止它有效,但我的问题有点复杂。我想要做的是找到两个几何对象的交点(所以线 - 弧,线 - 线,线 - 圆等)

public class Line{
//constructor and other methods
public Point[] intersection(Circle circle) {
//some code
}

public Point[] intersection(Line line) {
//some code
}

public Point[] intersection(LineSeg s) {
//some code
}
}

我想用Curve对象访问这些方法,所以在抽象类Curve中有一个方法intersection(Curve)。当我调用此方法时,它返回一个空数组,因为它调用了 Curve 类中的方法。我如何告诉 Java 使用 Arc、Line 等类中的方法而不是 Curve 中的方法?

public abstract class Curve {

public Point[] intersection(Curve c) {
return new Point[] {};
}
}

最佳答案

方法重载在编译期间解决,基于传递给方法的参数的静态类型,因此,当您传递Curve类型的变量时,方法static void test(曲线 c) 始终被选中,无论变量 i 引用的对象的运行时类型如何。

您可以用实例方法替换静态test 方法,从而使用方法覆盖:

在线类:

public void test() {
System.out.println("line");
}

在 Arc 类中:

public void test() {
System.out.println("arc");
}

在曲线类中:

public void test() {
System.out.println("curve");
}

并将循环更改为

for (Curve i : curves) {
i.test();
}

关于java - 将一个对象转换为它的最低类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46874266/

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