Различное поведение члена внутреннего класса, если внутренний класс расширяет внешний класс?

Этот код может помочь вам

var sr = $("#Search Result");
sr.load("AJAX-Search.aspx?q=" + $("#q")
.val() + "&rnd=" + String((new Date).getTime())
.replace(/\D/gi, ""));
24
задан Ehsan Sajjad 4 January 2016 в 17:13
поделиться

2 ответа

Начиная с InheritedB extends B, создание экземпляра InheritedB предоставляет ему атрибут val, который по умолчанию является «старым» для любого нового экземпляра класса B или подкласса.

Здесь InheritedB печатает свой собственный атрибут val, а не атрибут окружающего B.

5
ответ дан Arnaud 4 January 2016 в 17:13
поделиться

Разница в том, что в классе InnerB нет члена val. где класс InheritedB расширяет класс B и имеет собственную копию члена val.

void run(){

    val = "new";     //<--- modifies B's val not InheritedB's val

    System.out.println(val);        // outputs: new
    new InnerB().printVal();        // outputs: new
    new InheritedB().printVal();    // outputs: old new
}

В вышеприведенном кодовом блоке printVal InnerB обращается к члену контейнера val, значение которого уже было изменено в методе run для присвоения значения new .

Но копия val в объекте InheritedB по-прежнему имеет значение « old », не измененное, и функция printVal использует это значение.

2
ответ дан rajuGT 4 January 2016 в 17:13
поделиться
Другие вопросы по тегам:

Похожие вопросы: