我在理解抽象构造函数的工作方式时遇到了问题。我知道抽象超类就像后骨一样,所有子类都必须放置方法,但我不理解构造方。
public abstract class Animal{
public String name;
public int year_discovered;
public String population;
public Animal(String name, int year_discovered, String population){
this.name = name;
this.year_discovered = year_discovered;
this.population = population; }
}
上面是我的超级抽象类。下面是我的子类。
public class Monkey extends Animal{
public String type;
public String color;
public Monkey(String type, String color){
super(name,year_discovered,population)
this.type = type;
this.color = color;}
}
我收到一条错误消息,说我试图在调用之前引用超类型构造函数。
现在我这样做的原因是我不必为每个不同的物种重复代码。代码只是我试图帮助我解决困惑的一个简单例子。感谢您今后的回复。
答案 0 :(得分:4)
您的Monkey
类构造函数应如下所示:
public Monkey(String name, int year_discovered, String population, String type, String color){
super(name,year_discovered,population);
this.type = type;
this.color = color;
这样您就不会有重复的代码和编译错误。
答案 1 :(得分:2)
您正在访问Abstract类变量(name,year_discovered,population
),然后才在Monkey
类构造函数中初始化它们。使用如下
public Monkey(String name, int year_discovered, String population,
String type, String color){
super(name,year_discovered,population);
this.type = type;
this.color = color;
答案 2 :(得分:2)
让你的字段私有而不公开。
答案 3 :(得分:1)
如果name和year_discovered对于每个子动物都是静态的,您可以将Monkey构造函数定义为:
public Monkey(String type, String color){
super("Monkey",1900,"100000");
this.type = type;
this.color = color;
}