2015-06-07 2 views
1
public class P23 { 
    P23() { 
     print(); 
    } 

    void print() { 
     System.out.println("A"); 
    } 
} 

class B2 extends P23 { 
    int i = 0; // Math.round(3.5f); 

    public static void main(String[] args) { 
     System.out.println("inside main"); 
     P23 a = new B2(); 
     a.print(); 
    } 

    void print() { 
     System.out.println(i); 
    } 
} 

Не печатает ничего! Что мне не хватает? Пожалуйста, помогите мне понять, как отладить этот.Каким будет выход при запуске класса B2?

+0

* Ничего не печатать! * Я не могу воспроизвести это поведение. Я получаю вывод: 'inside main \ n 0 \ n 0'. Я использую Oracle JDK 1.8.0_45 под Windows 7. – Turing85

+0

внутри основного После предложения Эрана –

ответ

2

Если оба из этих классов находятся в том же исходном файле, вы должны сделать класс с основным методом общественный класс (т.е. изменение class B2 к public class B2 и изменить public class P23 к class P23). Если они не находятся в одном исходном файле, вы все равно должны сделать B2 общедоступным.

После исправления, выход из следующих строк будет:

System.out.println("inside main"); // prints 'inside main' 
P23 a = new B2(); // prints "0" since the constructor of B2 calls the constructor of P23 
        // which executes B2's print() 
a.print(); // prints "0" since B2's print() is executed 

В обоих вызовах print, в print метод суб-класса В2 называется, поскольку тип времени выполнения a является B2 ,

Поэтому выход

inside main 
0 
0 
+0

Спасибо @Eran, который ответил на многие мои вопросы! –

+0

Это не ответ. Фактически, (оригинальная) программа показывает некоторый вывод. Это должен быть комментарий. – Turing85

+0

@ Turing85 Отредактировано. Я изначально ответил, почему нет выхода. Теперь я добавил объяснение вывода. – Eran

0
public class P23 
{ 
    P23() { print(); } 
    void print() { System.out.println("A"); } 
    public static void main(String[] args) 
    { 
    System.out.println("inside main"); 
     P23 a = new B2(); 
     a.print(); 
    } 

} 
class B2 extends P23 
{ 
    int i = 0; //Math.round(3.5f); 
    void print() 
    { 
     System.out.println(i); 
    } 
} 
+0

Я думаю, что это код, который должен работать с оригинальной частью кода. –

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