powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Наследование
25 сообщений из 91, страница 1 из 4
Наследование
    #34824444
_fromoracle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Народ такой вопрос по джаве.
Долго копал может кто подскажет.

есть файл test.java:

class parent {
public String var="parent";

public void printvar() {
System.out.println(var);
}
}

class child extends parent {
public String var="child";

}

class test {
public static void main(String[] args) {
child c = new child();
c.printvar();
}

}

Печатает "parent".

Как сделать чтобы наследовалось значение поля ?
Заранее спасибо ...
...
Рейтинг: 0 / 0
Наследование
    #34824455
Фотография Penkov Vladimir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
добавить getVar() {return var;}
и дергать его
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Наследование
    #34824461
_fromoracle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо ..

А если таких полей очень много ?
Для каждого getfield добавлять ?
Может есть более простое решение ?
...
Рейтинг: 0 / 0
Наследование
    #34824469
am_sasa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
а поле наследуется, а то что ты подразумеваешь - никак!
делай типа в обоих классах
Код: plaintext
  public  String getVar(){  return  var; } 
а у парента типа
Код: plaintext
1.
2.
  public   void  printvar() {
System.out.println(getVar());
}
...
Рейтинг: 0 / 0
Наследование
    #34824479
_fromoracle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
am_sasaа поле наследуется, а то что ты подразумеваешь - никак!
делай типа в обоих классах
Код: plaintext
  public  String getVar(){  return  var; } 
а у парента типа
Код: plaintext
1.
2.
  public   void  printvar() {
System.out.println(getVar());
}


Так и сделал - заработало.

Может просто кто знает через Reflection можно сделать быстро для болшого количества таких варов в классе ?
...
Рейтинг: 0 / 0
Наследование
    #34824516
vas0
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_fromoracleМожет просто кто знает через Reflection можно сделать быстро для болшого количества таких варов в классе ? Что пустом начинаешь разводить ненужную сложность. Для того примера что ты привел, зачем там вообще наследование? Может можно все проще сделать?
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
 public   class  Bean {

     private   final  String value;

     public  Bean(String value) {
         this .value = value;
    }

     public   void  printValue() {
        System.out.println(value);
    }
}
...
Рейтинг: 0 / 0
Наследование
    #34824574
_fromoracle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
vas0 _fromoracleМожет просто кто знает через Reflection можно сделать быстро для болшого количества таких варов в классе ? Что пустом начинаешь разводить ненужную сложность. Для того примера что ты привел, зачем там вообще наследование? Может можно все проще сделать?
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
 public   class  Bean {

     private   final  String value;

     public  Bean(String value) {
         this .value = value;
    }

     public   void  printValue() {
        System.out.println(value);
    }
}


Типа самый умный ?

Я знаю что для моего примера можно без наследования. Тока мой пример сам по себе мне не нужен ...
Вопрос был именно в механизме передачи констант родителю ..
...
Рейтинг: 0 / 0
Наследование
    #34824608
Фотография Софтверный проктолог
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_fromoracle

Типа самый умный ?

Я знаю что для моего примера можно без наследования. Тока мой пример сам по себе мне не нужен ...
Вопрос был именно в механизме передачи констант родителю ..
Если бы вы всё делали по уму — такой проблемы не стояло бы.
...
Рейтинг: 0 / 0
Наследование
    #34824611
_fromoracle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Софтверный проктолог _fromoracle

Типа самый умный ?

Я знаю что для моего примера можно без наследования. Тока мой пример сам по себе мне не нужен ...
Вопрос был именно в механизме передачи констант родителю ..
Если бы вы всё делали по уму — такой проблемы не стояло бы.

По уму имеется ввиду с использованием getfield() для каждого поля ?
Или ещё что то другое ?
...
Рейтинг: 0 / 0
Наследование
    #34824665
Фотография Софтверный проктолог
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_fromoracle
По уму имеется ввиду с использованием getfield() для каждого поля ?
Или ещё что то другое ?
Да. Знакомо выражение Java Bean?
...
Рейтинг: 0 / 0
Наследование
    #34824687
_fromoracle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Софтверный проктолог _fromoracle
По уму имеется ввиду с использованием getfield() для каждого поля ?
Или ещё что то другое ?
Да. Знакомо выражение Java Bean?

Я вот не понимаю зачем флуд разводить ?

Да знакомо.
Уже попробывал через getfield() - заработало.

Тока представь что класс содержит 100 таких варов и таких 50 отнаследованных классов.
Все функциональность посути в parent а в каждом из детей она может быть опционально переопределена.
Можно тупо для каждого из полей писать в коде getfield().
Вопрос был в иллегантности решения.

Типа как PHP есть такая фича как auto_loaders.
Типа он автоматически понимает getfield и тупо ручками в код его писать не надо ...
...
Рейтинг: 0 / 0
Наследование
    #34825039
Фотография Софтверный проктолог
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_fromoracle

Тока представь что класс содержит 100 таких варов и таких 50 отнаследованных классов.
Все функциональность посути в parent а в каждом из детей она может быть опционально переопределена.
Можно тупо для каждого из полей писать в коде getfield().
Вопрос был в иллегантности решения.

Типа как PHP есть такая фича как auto_loaders.
Типа он автоматически понимает getfield и тупо ручками в код его писать не надо ...
Тут есть два варианта.
Можно своровать IDEA и с помощью его механизмов рефакторинга попыться быстро и элегантно перестроить прямые обращения на getter'ы как в основном классе, так и во всех наследуемых.
Или взять бесплатный Eclipse и посмотреть, что он предлагает в плане рефакторинга. Не исключено, что хватит и его возможностей.
...
Рейтинг: 0 / 0
Наследование
    #34825047
Фотография Софтверный проктолог
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_fromoracle
Типа он автоматически понимает getfield и тупо ручками в код его писать не надо ...
Дополнительно уточняю, что для этого есть такая вещь как автоматические средства рефакторинга кода, которые заменяют существующие вызовы. А когда пишешь новый класс — нет никакой разницы, использовать геттер или переменную.
...
Рейтинг: 0 / 0
Наследование
    #34825070
_fromoracle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ок ясно.
Буду копать.

Спасибо за советы ...
...
Рейтинг: 0 / 0
Наследование
    #34825156
Leonidv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
То что есть костыли для кривых решений отнюдь не значит, что надо этими кривыми решениями пользоваться. Сначала надо бы язык выучить, а потом уже претензии предъявлять. JavaBean тебе только знаком, не более того. Зачем это нужно и как это применять ты без понятия. Это раз.
Рефлексия нужна только в очень крайних случаях, как правило при создании библиотек типа Wicket и им подобных. Сейчас, насколько я понимаю, ее заменяют аннотациями (хотя может и не прав). Это два.
Учи ООП - это три.
Любая нормальная IDE умеет сама делать get/set-методы для указанных переменных (Eclipse точно умеет). Это четыре.
...
Рейтинг: 0 / 0
Наследование
    #34825243
_fromoracle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
LeonidvТо что есть костыли для кривых решений отнюдь не значит, что надо этими кривыми решениями пользоваться. Сначала надо бы язык выучить, а потом уже претензии предъявлять. JavaBean тебе только знаком, не более того. Зачем это нужно и как это применять ты без понятия. Это раз.
Рефлексия нужна только в очень крайних случаях, как правило при создании библиотек типа Wicket и им подобных. Сейчас, насколько я понимаю, ее заменяют аннотациями (хотя может и не прав). Это два.
Учи ООП - это три.
Любая нормальная IDE умеет сама делать get/set-методы для указанных переменных (Eclipse точно умеет). Это четыре.

Претензий я ни к кому не предъявляю.

"JavaBean тебе только знаком, не более того. Зачем это нужно и как это применять ты без понятия"
Ну как вам сказать для моих задач хватает только того что называют сессионными объектами сервлетов. Может где то их и более активно применяют не знаю не сталкивался. Но что такое JavaBean

"Рефлексия нужна только в очень крайних случаях" - абсолютно не согласен...

"Учи ООП - это три" - Спасибо за совет, как нить сам разберусь ок ?

"Любая нормальная IDE умеет сама делать get/set-методы для указанных переменных" - я пишу в обычно текстовом редакторе без IDE.
...
Рейтинг: 0 / 0
Наследование
    #34825281
Фотография Софтверный проктолог
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_fromoracle
"Рефлексия нужна только в очень крайних случаях" - абсолютно не согласен...
Ты используешь в рабочем коде что-то кроме Class.forName? Приведи пример, пожалуйста. Ну, чтобы это было очень необходимо?

_fromoracle
"Любая нормальная IDE умеет сама делать get/set-методы для указанных переменных" - я пишу в обычно текстовом редакторе без IDE.
Зря.
...
Рейтинг: 0 / 0
Наследование
    #34825318
Зашедший
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Софтверный проктолог _fromoracle
"Рефлексия нужна только в очень крайних случаях" - абсолютно не согласен...
Ты используешь в рабочем коде что-то кроме Class.forName? Приведи пример, пожалуйста. Ну, чтобы это было очень необходимо?

_fromoracle
"Любая нормальная IDE умеет сама делать get/set-методы для указанных переменных" - я пишу в обычно текстовом редакторе без IDE.
Зря.
Плюстыща. А вообще именно в этом топике ник пришелся как нельзя в тему :)
...
Рейтинг: 0 / 0
Наследование
    #34825367
_fromoracle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Софтверный проктолог _fromoracle
"Рефлексия нужна только в очень крайних случаях" - абсолютно не согласен...
Ты используешь в рабочем коде что-то кроме Class.forName? Приведи пример, пожалуйста. Ну, чтобы это было очень необходимо?

_fromoracle
"Любая нормальная IDE умеет сама делать get/set-методы для указанных переменных" - я пишу в обычно текстовом редакторе без IDE.
Зря.

"Приведи пример, пожалуйста. Ну, чтобы это было очень необходимо"
Пожалуйста:
Есть класс внутри проперти инициализируюся функциями.
Типа
class test {
Object properties[] = {
"list1" , source.list1() ,
"list2" , source.list2() ,
......
"listn" , source.listn();
};
}

Есть объект test t = new test();
Необходимо рефрешнуть properties внутри объекта t, т.е. чтобы заново запустились list1 .. listn.
n может принимать значения больше 1000.
Я конечно понимаю что можно и ручками наваять че нить типа
public void setproperties() {
Object properties[] = {
"list1" , source.list1() ,
"list2" , source.list2() ,
......
"listn" , source.listn();
};
}

и в конструкторе дёргать this.setproperties();

И далее написать t.setproperties();

Но более красиво сделать так:
test newinstance = (test)t.getClass().newInstance();
t.setproperties(newinstance.getproperties());

При таком подходе улучшается наглядность кода внутри класса, сразу видно какие переменные чем инициализируются.

по поводу IDE на вкус и цвет как известно ...
В том же NetBeans например нету автоматической закачки по FTP не сервер написанного кода.
...
Рейтинг: 0 / 0
Наследование
    #34825371
_fromoracle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Зашедший Софтверный проктолог _fromoracle
"Рефлексия нужна только в очень крайних случаях" - абсолютно не согласен...
Ты используешь в рабочем коде что-то кроме Class.forName? Приведи пример, пожалуйста. Ну, чтобы это было очень необходимо?

_fromoracle
"Любая нормальная IDE умеет сама делать get/set-методы для указанных переменных" - я пишу в обычно текстовом редакторе без IDE.
Зря.
Плюстыща. А вообще именно в этом топике ник пришелся как нельзя в тему :)

Чей ник ?
...
Рейтинг: 0 / 0
Наследование
    #34825434
Зашедший
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_fromoracleПожалуйста:
Есть класс внутри проперти инициализируюся функциями.
Типа
class test {
Object properties[] = {
"list1" , source.list1() ,
"list2" , source.list2() ,
......
"listn" , source.listn();
};
}

Есть объект test t = new test();
Необходимо рефрешнуть properties внутри объекта t, т.е. чтобы заново запустились list1 .. listn.
n может принимать значения больше 1000.
Я конечно понимаю что можно и ручками наваять че нить типа
public void setproperties() {
Object properties[] = {
"list1" , source.list1() ,
"list2" , source.list2() ,
......
"listn" , source.listn();
};
}

и в конструкторе дёргать this.setproperties();

И далее написать t.setproperties();

Но более красиво сделать так:
test newinstance = (test)t.getClass().newInstance();
t.setproperties(newinstance.getproperties());

При таком подходе улучшается наглядность кода внутри класса, сразу видно какие переменные чем инициализируются.

Э...А...ёпрст. Дальше забанено самоцензурой.
...
Рейтинг: 0 / 0
Наследование
    #34825438
Зашедший
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_fromoracleЧей ник ?
Софтверного Проктолога. Очень точно определяет описанное "арихитектурко типо Превед"
...
Рейтинг: 0 / 0
Наследование
    #34825445
Фотография Софтверный проктолог
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_fromoracle
Пожалуйста:
Есть класс внутри проперти инициализируюся функциями.
Типа
class test {
Object properties[] = {
"list1" , source.list1() ,
"list2" , source.list2() ,
......
"listn" , source.listn();
};
}

Есть объект test t = new test();
Необходимо рефрешнуть properties внутри объекта t, т.е. чтобы заново запустились list1 .. listn.
n может принимать значения больше 1000.
Я конечно понимаю что можно и ручками наваять че нить типа
public void setproperties() {
Object properties[] = {
"list1" , source.list1() ,
"list2" , source.list2() ,
......
"listn" , source.listn();
};
}

и в конструкторе дёргать this.setproperties();

И далее написать t.setproperties();

Но более красиво сделать так:
test newinstance = (test)t.getClass().newInstance();
t.setproperties(newinstance.getproperties());

При таком подходе улучшается наглядность кода внутри класса, сразу видно какие переменные чем инициализируются.

Эээээээээээээээ...
Это каг таг?
...
Рейтинг: 0 / 0
Наследование
    #34825450
_fromoracle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Да кстати для тех кто уже уже посмеялся и сказал

"test newinstance = (test)t.getClass().newInstance();
t.setproperties(newinstance.getproperties());

Заменить на

test newinstance = new test()
test.setproperties(newinstance.getproperties());
И никакой рефлексии

Усложним вернее приблизим схему к реальной когда

class test {
Object properties[] = {
"list1" , source.list1() ,
"list2" , source.list2() ,
......
"listn" , source.listn();
};
}

Помимо test есть отнаследованные childtest1 ... childtestn.
И В каждом из child-ов так инициализируется properties.
А далее внутри метода из test необходимо превести указанную процедуру для текущего объекта this.
Тут уж new test() не прокатит.
Остаётся только

test newinstance = (test)this.getClass().newInstance();
this.setproperties(newinstance.getproperties());
...
Рейтинг: 0 / 0
Наследование
    #34825459
_fromoracle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Зашедший _fromoracleЧей ник ?
Софтверного Проктолога. Очень точно определяет описанное "арихитектурко типо Превед"

По-русски научись говорить ......
...
Рейтинг: 0 / 0
25 сообщений из 91, страница 1 из 4
Форумы / Java [игнор отключен] [закрыт для гостей] / Наследование
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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