代码之家  ›  专栏  ›  技术社区  ›  sumitz1212

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

  •  1
  • sumitz1212  · 技术社区  · 9 年前

    我试图在类Catalog中形成对象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;
        }
    

    我知道这是一个非常简单的问题,你不必看到,只需给出上下文。我编写了几个类,比如哺乳动物,比如猫科动物,鸟类等。我是作业的最后一部分,Catalog,一系列get方法。我只需要获取Mammal、getBirds、getFeline,返回类型为Mammal或Birds[]等。我的尝试:

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

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

    4 回复  |  直到 9 年前
        1
  •  2
  •   sameer-s    9 年前

    我认为你所需要的是这样的:

    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;
        }
    }
    

    这将创建 Catalogue 具有实例变量 mammals birds ,并允许您获取这些值。 然后构造一个 目录 ,您可以拨打:

    Catalogue c = new Catalogue(mammal, birds);
    

    哪里 mammal 是的实例 Mammal 是的实例 Bird[] .

        2
  •  0
  •   iFytil    9 年前

    代替

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

    通过

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

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

    你可能认为这是显而易见的,因为你是 清晰地 返回 Mammal ,但Java强大且 明确地 键入。

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

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

        3
  •  0
  •   Rey Brujo    9 年前
    public Mammal getMammal() {
        Mammal mam = new Mammal();
        return mam;
    }
    

    你必须写出你要返回的对象类型。并在括号中写上“new Mammal(firstName,lastName,昵称)”

        4
  •  0
  •   Aviad    9 年前

    如果我正确理解,这个Catalog类应该是创建您创建的所有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的新实例,您还需要添加构造器:

    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;
        }