【发布时间】:2017-09-11 09:10:24
【问题描述】:
首先我尝试研究我的问题,但我不知道如何表达我的问题......所以我不确定是否有一个问题可以解决我的问题,也不确定这是否是最好的措辞我的问题也是。
所以,我有一个超类形状
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 方法,打印语句运行良好。这使我认为每个子类与超类交互的方式存在问题,但是,子类打印方法会覆盖并返回正确的值(区域除外:()
使用 area 和 volume 命令,代码无法编译,我收到此错误
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);
}
}
我没有足够的经验来完全理解这个问题,我一直在改变循环、变量的位置和类中的方法,但我没有取得进展。感谢您阅读这个冗长的问题,并感谢您提供的任何帮助。
【问题讨论】:
-
并提示:你有一个错误在那里......stackoverflow.com/questions/513832/…......不要使用==......看起来你现在负担过重。此时您可能应该退后一步,更多地关注真正的基础知识。
标签: java arrays inheritance foreach polymorphism