2015-10-25 3 views
1

Im получает эту ошибку при попытке создать конструктор для второго класса. Нужно ли использовать те же параметры для второго класса, что и первый класс?Неявный супер конструктор Person() не определен. Должен явно ссылаться на другой конструктор

class Person { 
    private String name; 
    private String gender; 
    private int phone; 

    protected Person(String n, String g, int p) 
      {name = n; gender = g; phone = p;} 
    public String toString(){return name +" "+gender+" "+phone;} 
} 


class Student extends Person { 
     private String subject; 
     private int sNumber; 
     protected Student(String s, int sn){subject = s; sNumber = sn;} 
} 


class Lecturer extends Person { 
    private String Department; 
    private int staffNo; 
    public Lecturer(String d, int stfNo){Department = d; staffNo = stfNo;} 
} 

ответ

0

Каждый расширенный класс сначала вызывает суперконструктор. В вашем классе Person вы определили только конструктор не по умолчанию, поэтому конструктор по умолчанию не существует.

Либо предоставить конструктор по умолчанию (конструктор без каких-либо параметров) в Person или вызвать супер конструктор явно с super(name, gender, phone)

0

При компиляции, компилятор добавит super() в качестве первой линии вашего ребенка конструктора ищущего родитель, не arg конструктор.

Поскольку ваш родительский класс уже имеет один параметр с параметрами, по умолчанию во время компиляции не будет создан конструктор arg.

Два решения:

  1. Добавить super(string,string,int) давая ей правильные параметры в первой строке вашего Чайлдс конструктора

  2. Создать Person() конструктор не принимая никаких аргументов, так что super() находит что-то для вызова при компиляции время.

0

Если класс расширяет другой класс, он должен вызывать конструктор этого расширенного класса.

Поскольку вы определили конструктор для Person вам нужно вызвать его в Student и Lecturer как первое заявление:

protected Student(String s, int sn, String n, String g, int p) 
{ 
    super(n, g, p); 
    subject = s; 
    sNumber = sn; 
} 

Вы не могли видеть эту ошибку раньше, так как компилятор автоматически добавляет super(); как первая заявление. Поскольку этот конструктор не существует (вы указали свой собственный), это не сработает.

Если вы не вызываете конструктор суперкласса, вы его не инициализируете.