gpt4 book ai didi

java - 数组中的多态子类对象方法不起作用

转载 作者:太空宇宙 更新时间:2023-11-04 11:34:34 24 4
gpt4 key购买 nike

首先,我尝试研究我的问题,但我不知道如何表达我的问题......所以我不确定是否有一个问题可以解决我的问题,也不确定这是否是我的问题的最佳措辞。

所以,我有一个父类(super class)形状

public abstract class Shape {
protected String name;
protected String type;
public Shape(){
name = "";
type = "";
}
public void print (){
System.out.printf("Name = %s, Type = %s", name, type);
}

}

和一个 2D 子类

public abstract class TwoDimensionalShape extends Shape{
protected double length;
protected double area;
public TwoDimensionalShape(double length){
if (length<0.0)
throw new IllegalArgumentException("ERROR: POSITIVE NUMBER REQUIRED");
this.length = length;
type = "Two Dimensional Shape";
}
public abstract void getArea();
@Override
public void print(){
System.out.printf("Name = %s, Type = %s, Length of side = %d, Area = %d",
name, type, length, area);
}
}

以及几个从 2D 延伸出来的较小的子类(以及另一个几乎相同的 3D 类)。我的问题是测试代码,它不计算面积。类测试代码

Circle S1 = new Circle(2.5);
etc.
shapesArray[0] = S1;
etc.
for(Shape CS : shapesArray){
CS.getArea();
if(CS.Type == "Three Dimensional Shape"){
CS.getVolume();
}
CS.print();
System.out.println(" ");
}
}

我删除了 getArea 和 getVolume 方法,并且 print 语句工作正常。这让我认为每个子类与父类(super class)交互的方式存在问题,但是,子类打印方法重写并返回正确的值(区域除外:()

使用面积和体积命令,代码无法编译,并且出现此错误

ShapeTest.java:25:错误:找不到符号 CS.getArea();

三次。

这是子类之一,以防它包含解决方案所需的重要信息。

public class Circle extends TwoDimensionalShape {
public Circle(double length){
super(length);
name = "Circle";
}
@Override
public void getArea(){
area = Math.PI * length * length;
}
@Override
public void print(){
System.out.printf("Name = %s, Type = %s, Radius = %f, Area = %f",
name, type, length, area);
}
}

我没有足够的经验来完全理解这个问题,我一直在改变类中的循环、变量的位置和方法,但我还没有取得进展。我感谢您阅读这个长问题,并且感谢您提供的任何帮助。

最佳答案

您的 Shape 类型未声明该方法。

编译器不知道您打算将 TwoDimensionalShape 对象放入该数组中。它只看到你说:这个数组包含Shapes;和形状没有其他两种方法!

所以你可以这样做:

  • 声明该数组仅包含 TwoDimensionalShape 对象。当然,那么你就不能添加3D了
  • 使用 if (thing is instanceof TwoDimensionalShape) { 然后转换为该类型
  • 然后:您不需要字符串类型。所有对象都有一个;并且该已经定义了其确切类型。这就是为什么您使用 instanceof 来确定类型;不是通过添加字符串字段并将该字符串(== 的错误方式)与其他字符串进行比较!

关于java - 数组中的多态子类对象方法不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43422866/

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