powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / статические поля в java
4 сообщений из 4, страница 1 из 1
статические поля в java
    #38226795
miklouha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
всем доброй ночи,
у меня такой вопрос...есть класс A
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
public class A extends B
	{
		private    String a; 
 
		public A() {}
				
		public A(String a)
			{
				this.a = a;
			}
		
		public methodA()
			{  	 
				 System.out.println(a);
			}

		public void superA()
	 		{ 
				System.out.println(a);
			}
	} 


который наследуется от B. У класса А одно поле a, два конструктора, один собственный метод methodA и один унаследованный от класса B метод superA. Я создаю объект класса А вызывая конструктор А: A newA = new A("123") и инициализируя поле a значением "123". Но в этом случае System.out.println(a) в унаследованном методе methodA вернет null. Чтобы вернуло значение "123" поле a в классе A должно быть объявлено как static.
Почему так происходит не могу понять?
...
Рейтинг: 0 / 0
статические поля в java
    #38226803
Фотография ZyK_BotaN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
покажи класс В.
...
Рейтинг: 0 / 0
статические поля в java
    #38226846
Фотография Паша01
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miklouha,

Такое может быть, если у тебя класс В выглядит вот так:

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
public class B {
    
    public B(){
	superA();
    }

    public void superA() {
    }

}



Т.е. ты в конструкторе базового класса вызываешь полиморфный метод (в твоем случае superA() ). Такое странное поведение объясняется немного необычным порядком инициализации.
Далее процитирую Брюса Эккеля из Thinking in Java:

Код: java
1.
2.
3.
4.
* Память, выделенная под новый объект, заполняется двоичными нулями.
* Конструкторы базовых классов вызываются в описанном ранее порядке. В этот момент вызывается переопределенный метод superA() (да, перед вызовом конструктора класса А), где обнаруживается, что переменная а равна null из-за первого этапа.
* Вызываются инициализаторы членов класса в порядке их определения.
* Исполняется тело конструктора производного класса.



Но лучше сам прочитай первоисточник Поведение полиморфных методов при вызове из конструкторов
...
Рейтинг: 0 / 0
статические поля в java
    #38227267
miklouha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Паша01,
премного благодарен, теперь все разъяснилось.)
...
Рейтинг: 0 / 0
4 сообщений из 4, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / статические поля в java
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]