Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/343.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在java中使用多态性生成不同类型的列表?_Java_List_Class_Oop_Polymorphism - Fatal编程技术网

如何在java中使用多态性生成不同类型的列表?

如何在java中使用多态性生成不同类型的列表?,java,list,class,oop,polymorphism,Java,List,Class,Oop,Polymorphism,我有三节课 圆、矩形和正方形 我想获得上述每个类所需的数据,并由用户创建它们 这意味着用户可以 想要什么,例如3个圆、2个矩形和7个正方形。 形状的数量取决于用户 然后我想将它们保存在一个单位列表中,并调用我的类方法,它们是calculateArea和calculatePerimeter,并用它们的名称显示它们的周长和面积 我怎么做 这些是我的课 圈 长方形 方格 创建一个接口,让我们调用TwoDimensionalShape并将常用方法放入其中 public interface TwoDime

我有三节课 圆、矩形和正方形

我想获得上述每个类所需的数据,并由用户创建它们

这意味着用户可以 想要什么,例如3个圆、2个矩形和7个正方形。 形状的数量取决于用户

然后我想将它们保存在一个单位列表中,并调用我的类方法,它们是calculateArea和calculatePerimeter,并用它们的名称显示它们的周长和面积

我怎么做

这些是我的课

长方形

方格


创建一个接口,让我们调用TwoDimensionalShape并将常用方法放入其中

public interface TwoDimensionalShape {
   double calculateArea();
   int calculatePrimeter();
}
所有类都实现了这个接口

然后创建一个列表,并将所有这些形状都放在此列表中。像

List<TwoDimensionalShape> shapes= new ArrayList<TwoDimensionalShape>();
shapes.add(new Circle(5));
shapes.add(new Rectangle(4,3));
shapes.add(new Square(4));
for (TwoDimensionalShape shape : shapes) {
    System.out.println("Area = " + shape.calculateArea());
    System.out.println("Perimeter = " + shape.calculatePrimeter());
}

创建一个接口,让我们调用TwoDimensionalShape并将常用方法放入其中

public interface TwoDimensionalShape {
   double calculateArea();
   int calculatePrimeter();
}
所有类都实现了这个接口

然后创建一个列表,并将所有这些形状都放在此列表中。像

List<TwoDimensionalShape> shapes= new ArrayList<TwoDimensionalShape>();
shapes.add(new Circle(5));
shapes.add(new Rectangle(4,3));
shapes.add(new Square(4));
for (TwoDimensionalShape shape : shapes) {
    System.out.println("Area = " + shape.calculateArea());
    System.out.println("Perimeter = " + shape.calculatePrimeter());
}

您可以使用继承的概念来实现这一点。例如,创建一个形状类,然后使其他类继承:

public abstract class Shape {
  public int calculateArea();
}
public class Circle extends Shape {}
public class Square extends Shape {}
public class Rectangle extends Shape {}

然后,您可以使用形状列表。

您可以使用继承的概念来实现这一点。例如,创建一个形状类,然后使其他类继承:

public abstract class Shape {
  public int calculateArea();
}
public class Circle extends Shape {}
public class Square extends Shape {}
public class Rectangle extends Shape {}

然后,您可以使用形状列表。

为例如形状创建一个界面

公共界面形状{ 国际计算协会; int计算器; } 在所有三个类中实现此接口。 单元列表将是一个列表,然后您可以调用calculateArea
和CalculateMeter方法,同时迭代列表

为例如Shape创建一个接口

公共界面形状{ 国际计算协会; int计算器; } 在所有三个类中实现此接口。 单元列表将是一个列表,然后您可以调用calculateArea
和CalculateMeter方法在列表上迭代时,您可以定义一个接口,并且您的所有类都将实现该接口。 将所有常用方法添加到接口中

public interface Shapes {
   public double calculateArea();
   public double calculatePrimeter();
}
现在,所有shape类都将实现上述接口,并提供接口方法的实现。在您的情况下,更改所有方法的返回类型。你可以把它加倍

public class Circle implements Shapes{
    private int radius;

    public Circle (int radius) {
        this.radius = radius;
    }

    @Override
    public double calculateArea() {
        return (radius * radius) * Math.PI;
    }

    @Override
    public double calculatePrimeter() {
        return (radius * 2) * Math.PI;
    }
}

public class Rectangle implements Shapes{}
public class Square implements Shapes{}
那么你需要有一个列表

static List<Shapes> unitList = new ArrayList<Shapes>();
用于计算周长

for (Shapes shape : unitList)
    System.out.println("Perimeter: " + shape.calculatePrimeter());

您可以定义一个接口,并且您的所有类都将实现该接口。 将所有常用方法添加到接口中

public interface Shapes {
   public double calculateArea();
   public double calculatePrimeter();
}
现在,所有shape类都将实现上述接口,并提供接口方法的实现。在您的情况下,更改所有方法的返回类型。你可以把它加倍

public class Circle implements Shapes{
    private int radius;

    public Circle (int radius) {
        this.radius = radius;
    }

    @Override
    public double calculateArea() {
        return (radius * radius) * Math.PI;
    }

    @Override
    public double calculatePrimeter() {
        return (radius * 2) * Math.PI;
    }
}

public class Rectangle implements Shapes{}
public class Square implements Shapes{}
那么你需要有一个列表

static List<Shapes> unitList = new ArrayList<Shapes>();
用于计算周长

for (Shapes shape : unitList)
    System.out.println("Perimeter: " + shape.calculatePrimeter());

如果您想正式了解多态性在java中的工作方式,可以参考Oracle java教程,其中解释了给定类的变量可以保存其任何子类的值,并且在超类变量上调用的方法将使用子类中的实现(如果存在)

要根据您的问题定制本教程中的信息,请执行以下操作:
列表可以被视为变量的集合,前面的答案中描述的形状列表可以包含形状的任何子类的实例,即正方形、矩形或圆形。调用列表元素上的calculateArea和CalculateMeter方法将调用该形状的相应方法。

如果您想了解java中多态性的工作原理,可以参考Oracle java教程,其中解释了给定类的变量可以保存其任何子类的值,如果存在超类变量,调用超类变量的方法将使用子类中的实现

要根据您的问题定制本教程中的信息,请执行以下操作:
列表可以被视为变量的集合,前面的答案中描述的形状列表可以包含形状的任何子类的实例,即正方形、矩形或圆形。调用列表元素上的calculateArea和CalculateMeter方法将调用该形状的相应方法。

让所有类实现特定接口,例如shape,然后拥有一个形状列表这是java书籍中接口/继承的最基本示例。让所有类实现特定接口,例如shape,然后列出形状这是java书籍中最基本的接口/继承示例。与抽象类相比,更喜欢接口。@Kartik,为什么更喜欢接口???@Dred Google我在上面写的句子。它将向您介绍Joshua Bloch的高效Java。比起抽象类,更喜欢接口。@Kartik,为什么更喜欢接口???@Dred Google我在上面写的句子。它将向您介绍Joshua Bloch的高效Java。