如何返回抽象类型?

时间:2015-09-18 07:15:39

标签: java

好的,我有一个名为Product的抽象类,以及从Product继承的两个类和服装。我也有第三类

public class ProductParser
{
public static Product parseStringToProduct(String lineToParse)
{

    String[] inputToken = lineToParse.split("/");
    if (inputToken[0].equalsIgnoreCase("Food"))
    {
        = new Food(inputToken[1], Integer.parseInt(inputToken[2]), Double.parseDouble(inputToken[3]), inputToken[4], Double.parseDouble(inputToken[5]), inputToken[6]);

    }
    else
    {
        = new Clothing(inputToken[1], Integer.parseInt(inputToken[2]), Double.parseDouble(inputToken[3]), inputToken[4], inputToken[5]);
    }

}

}

此方法将解析字符串,提取信息,使用带有对象属性的构造函数创建新的Clothing或Food对象,并将其返回给调用方法。

尝试返回对象时遇到了麻烦。 IDE告诉我需要返回Product类型的结果,但Product类是抽象的,无法实例化。

我应该如何创建这些对象并将其返回?

编辑: 我故意遗漏了返回关键字,因为我认为我应该创建一个变量或对象然后返回。我现在明白,Class和Food本身就是(继承的整个概念,愚蠢的我)产品,可以简单地返回。谢谢大家的答案。现在看起来很明显......

4 个答案:

答案 0 :(得分:1)

这是多态性的基本情况,食品或服装可以作为产品退回,因为食品ISA产品和服装ISA产品

你想做什么,可以这样做:

public static Product parseStringToProduct(String lineToParse)
{
    Product p=null;
    String[] inputToken = lineToParse.split("/");
    if (inputToken[0].equalsIgnoreCase("Food"))
    {
       p = new Food(inputToken[1], Integer.parseInt(inputToken[2]), Double.parseDouble(inputToken[3]), inputToken[4], Double.parseDouble(inputToken[5]), inputToken[6]);

    }
    else
    {
       p = new Clothing(inputToken[1], Integer.parseInt(inputToken[2]), Double.parseDouble(inputToken[3]), inputToken[4], inputToken[5]);
    }
    return p;
}

或者不是将其分配给产品变量,而是直接从if-else块

返回

希望这有帮助!

祝你好运!

答案 1 :(得分:0)

看看这是否有帮助: -

          String[] inputToken = lineToParse.split("/");
          Product product = null;
          if (inputToken[0].equalsIgnoreCase("Food"))
          {
              product = new Food(inputToken[1], Integer.parseInt(inputToken[2]), Double.parseDouble(inputToken[3]), inputToken[4], Double.parseDouble(inputToken[5]), inputToken[6]);

          }
          else
          {
              product = new Clothing(inputToken[1], Integer.parseInt(inputToken[2]), Double.parseDouble(inputToken[3]), inputToken[4], inputToken[5]);
          }
         return product;

答案 2 :(得分:0)

您忘记了return关键字:

public class ProductParser
{
public static Product parseStringToProduct(String lineToParse)
{

    String[] inputToken = lineToParse.split("/");
    if (inputToken[0].equalsIgnoreCase("Food"))
    {
       return new Food(inputToken[1], Integer.parseInt(inputToken[2]), Double.parseDouble(inputToken[3]), inputToken[4], Double.parseDouble(inputToken[5]), inputToken[6]);

    }
    else
    {
        return new Clothing(inputToken[1], Integer.parseInt(inputToken[2]), Double.parseDouble(inputToken[3]), inputToken[4], inputToken[5]);
    }

}

答案 3 :(得分:0)

您需要扩展Product类并创建一个具体的类,然后才能实例化它。

由于ClothingFoodProduct的类型,您只需将其分配给Product类型的变量即可。

实际上,在这里你可以在不声明变量的情况下返回它们。例如:

return new Clothing(inputToken[1], Integer.parseInt(inputToken[2]), Double.parseDouble(inputToken[3]), inputToken[4], inputToken[5]);