【发布时间】:2016-11-13 11:37:49
【问题描述】:
我一直在阅读 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;
}
}
}
以及具有main函数的主类。
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();
}
}
【问题讨论】:
-
在 Person 调用中定义无参数构造函数,例如
public Person(){}我会质疑 ArrayObj 真的是一个人吗? -
您有一个类
ArrayInObj,它用作Person的多个实例的容器。因此,它不应扩展Person。删除继承(通过删除extends Person),您不必再担心该错误。 -
@f1sh,+1。该问题是继承滥用的典型示例。可能在这里使用
List<Person>就足够了。如果作者需要一个人员树(每个人都需要有相关人员的列表),则应该通过实现与类型无关的通用数据结构(如MyTree<T>)以不同的方式完成,然后可以创建一个特定于类型的人员树:new MyTree<Person>(). -
这是书中的一个例子吗(我非常怀疑)? ArrayInObj 肯定不是一个人。为什么要从 Person 继承?
-
您的代码转录有误。在 Lafore 书中,这三个类之间没有继承关系。建议作为错字关闭。
标签: java