我一直在阅读Robert Lafore的Java书籍算法。并且有一个问题 - 对象排序。所以有三个类构成了层次结构。在书中它很好用,但在Eclipse中我有问题“隐式超级构造函数Person()未定义。必须显式调用另一个构造函数”。 我应该如何处理扩展类,或者我应该做些什么来使这个代码运行?请帮忙。谢谢。
class Person {
private String lastName;
private String firstName;
private int age;
public Person(String last, String first, int a) {
lastName = last;
firstName = first;
age = a;
}
public void displayPerson() {
System.out.print("Last name: " + lastName);
System.out.print(". First name: " + firstName);
System.out.println(". Age: " + age);
}
public String getLast() {
return lastName;
}
}
下一课扩展了人。
public class ArrayInObj extends Person {
private Person a[];
private int nElems;
public ArrayInObj(int max) { // Here is the problem
a = new Person[max];
nElems = 0;
}
public void insert(String last, String first, int age) {
a[nElems] = new Person(last, first, age);
}
public void display() {
for (int i = 0; i < nElems; i++) {
a[i].displayPerson();
}
System.out.println(" ");
}
public void insertionSort( ) {
int in, out;
for (out = 1; out < nElems; out++) {
Person temp = a[out];
in = out;
while (in > 0 && a[in-1].getLast().compareTo(temp.getLast()) > 0) {
a[in] = a[in -1];
--in;
}
a[in] = temp;
}
}
}
主要功能的主类。
public class ObjectSort extends ArrayInObj {
public ObjectSort(int max) {
super(max);
}
public static void main(String[] args) {
int maxSize = 10;
ArrayInObj arr = new ArrayInObj(maxSize);
arr.insert("Evans", "Patty", 24);
arr.insert("Smith", "Lorainne", 37);
arr.insert("Yee", "Tom", 43);
arr.insert("Adams", "Henry", 63);
arr.insert("Hashimoto", "Sato", 21);
System.out.println("Before sorting: ");
arr.display();
arr.insertionSort();
System.out.println("After sorting: ");
arr.display();
}
}
答案 0 :(得分:5)
您收到此错误的技术原因是DNAStringSet(paste0(as.character(set1), as.character(set2)))
的唯一构造函数隐式调用其超类的构造函数,如下所示:
ArrayInObj
要修复编译错误,您可以显式调用超类的现有构造函数,也可以为public ArrayInObj(int max) {
/* this gets implicitly added and fails to compile */
super();
a = new Person[max];
nElems = 0;
}
定义零参数构造函数。
阅读您的代码我的印象是,正确的解决方案是从Person
的定义中移除extends Person
。问问自己:ArrayInObj
一个ArrayInObj
?不,它似乎是Person
数组的容器。
答案 1 :(得分:1)
ArrayInObj
正在扩展Person
,在ArrayInObj
的构造函数中,它隐式调用Person
构造函数super()
(未明确调用不同的super()
Person
)。但是,Person
类没有零参数构造函数。显式调用已定义的super(a,b,c)
构造函数ArrayInObj extends Person
,或者没有com.here.android.mpa.common.Error.getDetails()
com.here.android.mpa.common.Error.getStackTrace()
。
答案 2 :(得分:0)
有三种可能性:
Person()
添加到Person类super(last, first, a)
的现有构造函数作为第一个调用extends Person
答案 3 :(得分:0)
正如其他人所说,你需要在Person类中提供一个默认构造函数,以便ArrayInObj类可以使用它。
您还可以阅读文档https://docs.oracle.com/javase/tutorial/java/javaOO/constructors.html中的构造函数,或者关于此站点Java default constructor的默认构造函数。