没有合适的构造函数在扩展的子类构造函数中发现错误

时间:2015-04-22 00:40:39

标签: java class constructor

我最近一直致力于一个项目,我最终使用了一个扩展另一个类的类(即Connection和Transfer)。我收到的错误是"错误:没有为Connection找到合适的构造函数(没有参数)。"错误是在Transfer的构造函数开头的行中给出的。

class Connection {
    List<Station> connectedStations = new ArrayList();
    int length;
    boolean isTransfer = false;

    public Connection(Station s1, Station s2, int distance) {
        /* Code in here */
    }
    public Connection(Station s1, Station s2) {
        /* Code in here */
    }

}

和转移:

class Transfer extends Connection {
    List<Line> linesTransfer = new ArrayList();
    boolean isTransfer = true;
    public Transfer(Station s1, Station s2, int distance, Line l1, Line l2) {
        /* Code in here */
    }
    public Transfer(Station s1, Station s2, Line l1, Line l2) {
        /* Code in here */
    }

}

在我的主要课程中,我有几个功能可以使用它们。如果除了这个函数以外的所有函数都被注释掉了,我会继续得到同样的错误:

public static Station findInStations(int iD) {      
    for(Entry<Integer, Station> stat : stations.entrySet()) {
        if(stat.getValue().id == iD) { 
            return stat.getValue();
        }
    }
    return null;
}

这基本上可以在主类的实例变量hashmap中找到您要查找的工作站。

1 个答案:

答案 0 :(得分:3)

Transfer扩展Connection以来,构建Transfer时,必须先调用Connection的构造函数,然后才能继续构建Connection。默认情况下,Java将使用no-args构造函数(如果存在)。但是,Connection没有no-args构造函数(因为你明确定义了一个构造函数,然后没有明确定义一个no-args构造函数),因此你必须明确指定一个构造函数Connection要使用。

因此,你应该写:

class Transfer extends Connection {
    List<Line> linesTransfer = new ArrayList();
    boolean isTransfer = true;
    public Transfer(Station s1, Station s2, int distance, Line l1, Line l2) {
      super(s1, s2, distance);
      /* Code in here */
    }
    public Transfer(Station s1, Station s2, Line l1, Line l2) {
      super(s1, s2);
      /* Code in here */
    }
  }

这是显式调用基类的构造函数的方法。