2 つのインターフェイスと、それらを実装する 1 つのクラスがあります。インターフェイスでは、1 つの通常のメソッドと 1 つのジェネリック メソッドを示しました。それらをメインメソッドに実装すると、通常のメソッドは正しい結果を示しますが、一般的なメソッドはそうではありません。可能であれば、recrease_twice() メソッドが正しい結果を返さない理由を教えてください。ここに私のコードがあります:
Rectangle.java:
public class Rectangle implements TwoDShape {
private double width, height;
public Rectangle (double width, double height) {
this.width = width;
this.height = height;
}
public double area() {
return width * height;
}
public double perimeter() {
return 2.0 * (width + height);
}
public void describe() {
System.out.println("Rectangle[width=" + width + ", height=" + height + "]");
}
@Override
public Rectangle increase_twice() {
// TODO Auto-generated method stub
return new Rectangle(2*this.width, 2*this.height);
}
}
TwoDShape.java:
public interface TwoDShape extends GeometricShape {
public double area();
}
幾何学的形状.java:
public interface GeometricShape<T extends GeometricShape<T>>
{
public void describe();
public T increase_twice();
}
最後にクラス ArrayListExample.java をテストします
import java.util.ArrayList;
public class ArrayListExample {
public static void describe_all( ArrayList<? extends GeometricShape> shapes )
{
for(int i=0;i<shapes.size();i++)
{
shapes.get(i).describe();
}
System.out.println("Total number of shapes:"+ shapes.size());
}
private static ArrayList<Rectangle> increase_size(ArrayList<Rectangle> rects)
{
for(int i=0;i<rects.size();i++)
{
rects.get(i).increase_twice();
}
return rects;
}
public static void main(String[] args) {
System.out.println("The result of describe() method:");
System.out.println();
System.out.println("Example rectangles");
ArrayList<Rectangle> rects = new ArrayList<Rectangle>();
rects.add(new Rectangle(2.0, 3.0));
rects.add(new Rectangle(5.0, 5.0));
describe_all(rects);
System.out.println();
System.out.println("The result of increase_twice() method:");
System.out.println();
System.out.println("Example rectangles after increase:");
ArrayList<Rectangle> double_rects = increase_size(rects);
describe_all(double_rects);
}
}
私は increase_twice が Rectangle[width=4.0, height=6.0] Rectangle[width=10.0, height=10.0] で長方形を返すことを期待していますが、代わりに describe メソッドと同じものを返します: Rectangle[width=2.0, height=3.0 ] Rectangle[幅=5.0, 高さ=5.0] できればどこが間違っているのか教えていただけないでしょうか?