Java:如何创建一个从继承类中获取对象的getter方法?

时间:2015-02-21 21:25:04

标签: java class inheritance getter getter-setter

我试图在类目录中形成对象Mammal的getter方法。 get方法没有参数,并且返回类型为Mammal(?)

public class Mammal extends Animal {
    private double intellect;
    private double hitpoints;

    public Mammal(String firstName, String lastName, String nickname) {
        super(firstName, lastName, nickname);
    }

    public void setIntellect(double intellect) {
        this.intellect = intellect;
    }

    public void setHitpoints(double hitpoints) {
        this.hitpoints = hitpoints;
    }
    public double getIntellect() {
        return intellect;
    }
    public double getHitpoints() {
        return hitpoints;
    }

我知道这是一个非常简单的问题,你没有必要看到它,只是给出了背景。我编写了几个像Mammal这样的类,比如Feline,Birds等,它是作业的最后一部分,Catalog,一系列get方法。我只需要getMammal,getBirds,getFeline,返回类型是Mammal,或Birds []等。所以对象本身或对象数组。我的尝试:

public class Catalogue{
    private Mammal mam;

    public getMammal() {
       Mammal mam = new Mammal();
       return mam;
    }
}

所以我显然不明白在这一步做什么。任何帮助,将不胜感激!我得到的编译错误是"无效的方法声明;需要返回类型"。我以几种不同的方式尝试,但似乎无法克服此错误。

4 个答案:

答案 0 :(得分:2)

我认为你需要的东西看起来像这样:

public class Catalogue 
{
    private Mammal mammal;
    private Bird[] birds;
    public Catalogue(Mammal mammal, Bird[] birds)
    {
       this.mammal = mammal;
       this.birds = birds;
    }
    public Mammal getMammal()
    {
     return mammal;
    }
    public Bird[] getBirds()
    {
      return birds;
    }
}

这会创建一个包含实例变量Cataloguemammals的{​​{1}},并允许您获取这些值。 然后构建一个birds,你打电话:

Catalogue

其中Catalogue c = new Catalogue(mammal, birds); mammal的实例,而Mammalbirds的实例。

答案 1 :(得分:0)

替换

public getMammal() {
   Mammal mam = new Mammal();
   return mam;
}

通过

public Mammal getMammal() {
   Mammal mam = new Mammal();
   return mam;
}

您需要明确并定义getter方法的返回类型,以及任何非构造函数方法。

您可能认为这很明显,因为您明确返回Mammal,但Java强烈且明确地键入。

有些编程语言可以通过检查代码来推断方法的返回类型,但Java不是其中之一。

例如,Scala是强类型的,但通常可以推断出返回类型的方法是什么。

答案 2 :(得分:0)

public Mammal getMammal() {
    Mammal mam = new Mammal();
    return mam;
}

你必须写下你将要返回的对象类型。并在括号中写下#34;新的哺乳动物(firstName,lastName,昵称)"

答案 3 :(得分:0)

如果我理解正确,那么这个Catalog类应该是创建你创建的All the Animal类型的实例的东西..其中一个解决方案很简单,就像:

public class Catalogue{

    public Mammal getMammal() {
       return new Mammal();
    }
}

您不需要Catalog来保存实例。另一个通用解决方案是:

public class Catalogue{

    public static Animal getAnimalByType(Class type) {
       return type.newInstance();
    }
}

当你打电话给你时,你会知道类型..所以这将是通用的。

Mammal m = (Mammal) Catalogue.getAnimalByType(Mammal.class);

投射是必需的,因为在你的泛型类型中你将返回Animal,所以这将是通用的并适用于所有动物类型..当你调用该方法时,你知道你想要什么样的动物。因为你传递了这个作为构造函数中的参数

希望有所帮助..当然,这可能会更复杂,但现在可以完成这项工作。

编辑:

为了创建新的Mammal实例,您还需要添加construtor:

public class Mammal extends Animal {
    private double intellect;
    private double hitpoints;

    public Mammal() {
        super();
    }

    public Mammal(String firstName, String lastName, String nickname) {
        super(firstName, lastName, nickname);
    }

    public void setIntellect(double intellect) {
        this.intellect = intellect;
    }

    public void setHitpoints(double hitpoints) {
        this.hitpoints = hitpoints;
    }
    public double getIntellect() {
        return intellect;
    }
    public double getHitpoints() {
        return hitpoints;
    }