Java:如何创建从继承的 class 获取对象的 getter 方法?
Java: How do I create a getter method that gets an object from an inherited class?
我正在尝试为 class 目录中的哺乳动物对象构建 getter 方法。
get 方法没有参数,并且具有 return 类型 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;
}
我知道这是一个非常简单的问题,您不必看到它,只需提供上下文即可。我编码了几个class像Mammal,比如Feline,Birds等等,是assignment的最后一部分,Catalog,一系列的get方法。我只需要 getMammal、getBirds、getFeline,并且 return 类型是 Mammal 或 Birds[] 等。所以对象本身或对象数组。我的尝试:
public class Catalogue{
private Mammal mam;
public getMammal() {
Mammal mam = new Mammal();
return mam;
}
}
所以我显然不明白在这一步要做什么。任何帮助,将不胜感激!我得到的编译错误是 "invalid method declaration; return type required"。我正在尝试几种不同的方法,但似乎无法克服这个错误。
替换
public getMammal() {
Mammal mam = new Mammal();
return mam;
}
来自
public Mammal getMammal() {
Mammal mam = new Mammal();
return mam;
}
您需要明确定义 return 类型的 getter 方法,以及任何非构造方法。
你可能认为这是显而易见的,因为你很清楚 return正在 Mammal
,但是 Java 很明显 [=26] =]明确输入。
有些编程语言可以通过检查代码推断出方法的 return 类型,但 Java 不是其中之一。
例如,Scala 是强类型的,但通常可以推断出 return 类型的方法。
public Mammal getMammal() {
Mammal mam = new Mammal();
return mam;
}
您必须写出您将 return 的对象类型。并写在括号 "new Mammal(firstName,lastName,nickname)"
如果我对你的理解正确的话,这个目录 class 应该可以创建你创建的所有动物类型的实例。其中一个解决方案很简单,就像:
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);
强制转换是必需的,因为在你的通用类型中你将 return 动物,所以这将是通用的并且适用于所有动物类型。当你调用该方法时你知道你想要哪种动物.. 因为你将它作为参数传递给构造函数
希望对您有所帮助。当然,这可以更复杂,但现在就可以了。
编辑:
为了创建 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;
}
我想你需要的是这样的:
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
,你调用:
Catalogue c = new Catalogue(mammal, birds);
其中 mammal
是 Mammal
的实例,birds
是 Bird[]
的实例。
我正在尝试为 class 目录中的哺乳动物对象构建 getter 方法。 get 方法没有参数,并且具有 return 类型 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;
}
我知道这是一个非常简单的问题,您不必看到它,只需提供上下文即可。我编码了几个class像Mammal,比如Feline,Birds等等,是assignment的最后一部分,Catalog,一系列的get方法。我只需要 getMammal、getBirds、getFeline,并且 return 类型是 Mammal 或 Birds[] 等。所以对象本身或对象数组。我的尝试:
public class Catalogue{
private Mammal mam;
public getMammal() {
Mammal mam = new Mammal();
return mam;
}
}
所以我显然不明白在这一步要做什么。任何帮助,将不胜感激!我得到的编译错误是 "invalid method declaration; return type required"。我正在尝试几种不同的方法,但似乎无法克服这个错误。
替换
public getMammal() {
Mammal mam = new Mammal();
return mam;
}
来自
public Mammal getMammal() {
Mammal mam = new Mammal();
return mam;
}
您需要明确定义 return 类型的 getter 方法,以及任何非构造方法。
你可能认为这是显而易见的,因为你很清楚 return正在 Mammal
,但是 Java 很明显 [=26] =]明确输入。
有些编程语言可以通过检查代码推断出方法的 return 类型,但 Java 不是其中之一。
例如,Scala 是强类型的,但通常可以推断出 return 类型的方法。
public Mammal getMammal() {
Mammal mam = new Mammal();
return mam;
}
您必须写出您将 return 的对象类型。并写在括号 "new Mammal(firstName,lastName,nickname)"
如果我对你的理解正确的话,这个目录 class 应该可以创建你创建的所有动物类型的实例。其中一个解决方案很简单,就像:
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);
强制转换是必需的,因为在你的通用类型中你将 return 动物,所以这将是通用的并且适用于所有动物类型。当你调用该方法时你知道你想要哪种动物.. 因为你将它作为参数传递给构造函数
希望对您有所帮助。当然,这可以更复杂,但现在就可以了。
编辑:
为了创建 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;
}
我想你需要的是这样的:
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
,你调用:
Catalogue c = new Catalogue(mammal, birds);
其中 mammal
是 Mammal
的实例,birds
是 Bird[]
的实例。