Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> NPE в конструкторе суперкласса 
V
    Опции темы
Temdegon
Дата 28.4.2010, 13:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 429
Регистрация: 11.10.2008
Где: Minsk

Репутация: 7
Всего: 9



Есть вот такой вот код:

Код

public class Main {

    public static void main(String[] args) {
        try {
            B b = new B();

        } catch (Throwable x) {
            System.out.println(x);
        }
    }
}

class A {

    private String string = "Green";

    public A() {
        System.out.println("string: \"" + getString() + "\", length: " + getString().length());
    }

    public String getString() {
        return string;
    }
}

class B extends A {

    private String string = "Red";

    @Override
    public String getString() {
        return string;
    }
}


Почему вызов getString() в кострукотре A() возвращает null?
Объясните пожалуйста, getString() в этом конструкторе вызывается из класса А или из B?
PM MAIL   Вверх
jk1
Дата 28.4.2010, 14:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник
Сообщений: 1168
Регистрация: 17.10.2008
Где: Санкт-Петербург

Репутация: 40
Всего: 75



getString()  будет вызван из В, сработает полиморфизм. 
Что касается NPE, то вот в чем дело: при вызове new B() сначала неявно вызывается конструктор суперкласса (с предварительной инициализацией поля string класса А), обращающийся к методу getString(). Этот метод возвращает значение переменной из фактического объекта, то есть из В. А она к тому времени еще не инициализирована, так как конструктор суперкласса еще не завершил выполнение.


--------------------
Opinions are like assholes — everybody has one
PM MAIL   Вверх
Temdegon
Дата 28.4.2010, 15:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 429
Регистрация: 11.10.2008
Где: Minsk

Репутация: 7
Всего: 9



Спасибо, все понятно.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
javastic
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0400 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.