Java抽象构造函数问题

时间:2014-02-07 10:54:23

标签: java

我在理解抽象构造函数的工作方式时遇到了问题。我知道抽象超类就像后骨一样,所有子类都必须放置方法,但我不理解构造方。

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

我收到一条错误消息,说我试图在调用之前引用超类型构造函数。

现在我这样做的原因是我不必为每个不同的物种重复代码。代码只是我试图帮助我解决困惑的一个简单例子。感谢您今后的回复。

4 个答案:

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