gpt4 book ai didi

java - 管理异构 Java 数组中的不同对象

转载 作者:行者123 更新时间:2023-11-30 08:48:34 24 4
gpt4 key购买 nike

我必须在 Java 中解决这个“容器问题”。我有一个由不同数字组成的数组,我希望下面的代码能够工作:

 package container;
class Figure{
public void draw() {}
public String getColor() { return null; }
}

class Square extends Figure{
@Override
public void draw(){
System.out.println("Square");
}
}

class Circle extends Figure{
@Override
public void draw(){
System.out.println("Circle");
}
public float getRadius(){
return 8;
}
}

public class Container {

public static void main(String[] args) {

Figure[] figures = new Figure[3];
figures[0]= new Circle();
figures[1]= new Circle();
figures[2]= new Square();

for(Figure figure:figures){
figure.getColor();
figure.draw();
((Circle) figure).getRadius();
}
}
}

您可以看到存在问题,因为 Square 没有 getRadius() 方法。我有以下限制:

  • 不能使用泛型
  • 不能使用instanceof

它应该是一个很好的面向对象设计解决方案。

最佳答案

为什么不在基类中添加一个enum FigureType 来标识子类?

public static enum FigureType {

Square,
Circle
}

public static class Figure {
private FigureType type;

public Figure(FigureType type) {
this.type = type;
}

public FigureType getType() {
return type;
}

public void draw() {
}

public String getColor() {
return null;
}
}

您必须向每个子类添加一个默认构造函数,该子类使用其 FigureType 调用父类构造函数。

public static class Square extends Figure {

public Square() {
super(FigureType.Square);
}

@Override
public void draw() {
System.out.println("Square");
}
}

public static class Circle extends Figure {

public Circle() {
super(FigureType.Circle);
}

@Override
public void draw() {
System.out.println("Circle");
}

public float getRadius() {
return 8;
}
}

用法:

public static void main(String[] args) {

Figure[] figures = new Figure[3];
figures[0] = new Circle();
figures[1] = new Circle();
figures[2] = new Square();

for (Figure figure : figures) {
figure.getColor();
figure.draw();
if (figure.getType() == FigureType.Circle) {
((Circle) figure).getRadius();
}
}
}

结果:

Circle
Circle
Square

无一异常(exception)

关于java - 管理异构 Java 数组中的不同对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31855679/

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