Java三类层次结构

时间:2016-07-11 13:34:42

标签: java

我一直在阅读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();

    }

}

4 个答案:

答案 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)

有三种可能性:

  1. 您将构造函数Person()添加到Person类
  2. 在ArrayInObj类构造函数中调用带有super(last, first, a)的现有构造函数作为第一个调用
  3. 您的ArrayInObj类真的是个人吗?看起来不像。删除extends Person

答案 3 :(得分:0)

正如其他人所说,你需要在Person类中提供一个默认构造函数,以便ArrayInObj类可以使用它。

您还可以阅读文档https://docs.oracle.com/javase/tutorial/java/javaOO/constructors.html中的构造函数,或者关于此站点Java default constructor的默认构造函数。