gpt4 book ai didi

java - 如何在数组中同时调用抽象方法和接口(interface)方法?

转载 作者:行者123 更新时间:2023-12-02 09:28:28 25 4
gpt4 key购买 nike

我创建了一个数组来保存不同的形状。 Circle 和 Square 是从 Shape 类扩展而来的抽象类。 Cube 和 Sphere 来自名为 ThreeDShape 的接口(interface)。我需要找到所有形状的面积以及 3D 形状的面积和体积,并使用数组调用它们。我得到了能够使用抽象方法的 Test 类。如何让测试类使用接口(interface)方法?如何在单个数组中打印抽象方法和接口(interface)方法?

我还需要使用 getClass() 方法从数组中调用每个类的详细信息。

public class Test {

public static void main(String[] args) {






Shape [] shape = new Shape[4];

Circle circle = new Circle();
shape[0] = circle;

Shape sphere = new Sphere();
shape[1] = sphere;

Shape cube = new Cube();
shape[2] = cube;

Square square = new Square();
shape[3] = square;






for(Shape shape1 : shape) {
System.out.println("The area of " + shape1.getClass() +" is " + shape1.area());
System.out.println("The volume of " + shape1.getClass() +" is " + shape1.volume());

System.out.println("Found in " + shape1.getClass());
System.out.println(" ");

}








}






}






public interface ThreeDShape {

public abstract double volume();

}
public class Cube implements ThreeDShape{

double a = 5;


public double volume() {
return a*a*a;
}

public double area() {
return 6*a*a;
}


}

public class Square extends Shape {

double s = 5;

public double area() {
return s*s;

}
}

public class Circle extends Shape {

double r = 9;

public double area() {
return r*r*3.14;

}

}
public class Sphere implements ThreeDShape {

double r1 = 5;

public double volume() {
return ( 4.0 / 3.0 ) * Math.PI * Math.pow( r1, 3 );
}


public double area() {
return 4*3.14*r1*r1;
}



}
public abstract class Shape {


public abstract double area();

protected abstract double volume();




}


```

最佳答案

你的设计是错误的。

一切都应该是Shape的子类。如果您想要一些特化,那么 SphereCube 应该是 ThreeDShape 的子类,而 ThreeDShapeShape 的子类。因此,要做你所做的事情,你只需调用 Shapesuper 方法,该方法在每个子类上都有不同的实现(也称为覆盖)。循环就变成这样:

for (Shape s: shapes){
s.myBeautifulMethod();
}

如果您想保留 ThreeDShape 作为接口(interface),那么 SphereCube 应该两者 形状ThreeDShape:

public class Sphere extends Shape implements ThreeDShape { [...] }
public class Cube extends Shape implements ThreeDShape { [...]}

但我会坚持使用单一层次结构,否则您将前进到 multiple inheritance ,这不是很 Java。

您要求的是根本不需要的反射(reflection)逻辑。

希望我能有所帮助。

关于java - 如何在数组中同时调用抽象方法和接口(interface)方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58168788/

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