2014-09-28 3 views
3

Я видел эту программу в Java книги с тестами и я не могу понять, почему это правильный ответ:Java тест (начальный)

Какой будет результат работы программы?

class Base 
{ 
    Base() 
    { 
     System.out.print("Base"); 
    } 
} 
public class Alpha extends Base 
{ 
    public static void main(String[] args) 
    { 
     new Alpha(); /* Line 12 */ 
     new Base(); /* Line 13 */ 
    } 
} 

Все ответы:

  • A.Base
  • B.BaseBase
  • C.Compilation терпит неудачу
  • d.The код работает без выхода

Правильный ответ: BaseBase.

+1

[Родственные] (http://stackoverflow.com/questions/10508107/why-call-super-in-a-constructor) – Scis

ответ

9

При первом вызове new Alpha() вы вызываете конструктор по умолчанию Alpha. Поскольку он явно не объявлена, она неявно определяется как:

public Alpha() { 
    super(); 
} 

Поэтому new Alpha() вызывает конструктор по умолчанию Base (becauses Alpha подкласс Base), который печатает «Base». Затем new Base() также вызывает этот конструктор и снова печатает «Base», в результате чего получается окончательный выход «BaseBase».

3

Это будет ответ B.BaseBase. Причина проста. Все объекты при создании экземпляра вызываются конструктором по умолчанию класса. Хотя в классе Alpha нет конструктора, java неявно предоставляет один и через который он вызывает конструктор по умолчанию своего базового класса i.e Base().

его как неявное супер() ключевое слово добавляется в начале каждого конструкторами по умолчанию

public Alpha() { 
    super(); 
} 

И те же способы, когда вы называете новую базу(); отображается соответствующий вывод, который находится в его конструкторе.

Смежные вопросы