【发布时间】:2016-05-20 00:31:16
【问题描述】:
我正在学习多态性,我在我的超类和子类中得到这条红线,它在我的代码中被注释:
public class Animals {
private String name;
public Animals(String name) {
this.name = name;
}
public void changeName(String name){
this.name= name;
}
public String getName(){
return this.name; //
}
}
这是我的子类:
public class Dog extends Animals {
private String colour;
public Dog(String name, String colour){
super(name);
this.colour = colour;
}
public void changeColour(String colour) {
this.colour = colour;
}
public String getColour(){
return this.colour;
}
}
这是另一个带有 main 方法的脚本:
public class AnimalPolyTesting {
public static void main(String[] args) {
Animals puppy = new Dog("homie", "black"); // constructor Dog cannot be applied to given types;
puppy.getName();
(Dog) puppy.getColour(); // not a statement
}
}
我不确定为什么会出现这些红线 编辑:代码运行但没有任何结果。 Edit2:修复了类。
【问题讨论】:
-
一个
void方法不能return一个值。 -
您的方法
getName()声明void(即“无返回类型”)为其返回类型,但您尝试返回String,即变量name的内容。那是不相容的。您必须声明像public String getName()这样的方法。 -
public void Animals(String name)是一种方法。要将其变成构造函数,请删除void,因此您的基类只有默认构造函数public Animals(),因此构造函数错误 -
Java 中的多态性通常有一些特殊的类,例如
abstract class。你的一门课可以考虑abstract吗?此外,也许再次查看类 docs.oracle.com/javase/tutorial/java/javaOO/constructors.html 的构造函数语法 -
另外
Animal(单数)是该类的更好名称
标签: java methods polymorphism subclass superclass