Анонимный класс, переобъявляющий атрибутыJAVA

Программисты JAVA общаются здесь
Anonymous
Анонимный класс, переобъявляющий атрибуты

Сообщение Anonymous »

Я не понимаю, почему я получаю следующий вывод. Почему, когда я пишу myAnimal.x, я получаю другое значение от printx(). Разве к объекту myAnimal не должно быть прикреплено только одно поле x?
Я получаю следующий результат:

Гав-гав

3

5

3

-----------

20

5


Я ожидал, что и myAnimal.x, и printx() напечатают 5
// Normal class
class Animal {
public void makeSound() {
System.out.println("Animal sound");
}
public int x = 3;

public void printx() {System.out.println("printing x from class animal"); }
}

public class Main {
public static void main(String[] args) {
// Anonymous class that overrides makeSound()
Animal myAnimal = new Animal() {
public void makeSound() {
System.out.println("Woof woof");
}
public int x = 5;
public void printx() {System.out.println(this.x);}
};

myAnimal.makeSound();
System.out.println(myAnimal.x);

myAnimal.printx();
System.out.println(myAnimal.x);

System.out.println("-----------");
myAnimal.x = 20;
System.out.println(myAnimal.x);

myAnimal.printx();

}
}


Подробнее здесь: https://stackoverflow.com/questions/797 ... attributes

Вернуться в «JAVA»