С Новым годом! Форум программистов, компьютерный форум, киберфорум
Java SE (J2SE)
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.95/40: Рейтинг темы: голосов - 40, средняя оценка - 4.95
89 / 1 / 3
Регистрация: 04.07.2013
Сообщений: 282

Через класс B изменить переменную type в классе А

07.03.2015, 19:59. Показов 8579. Ответов 22
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
У меня есть класс А.

Java
1
2
3
4
5
6
7
8
9
public class A extends B 
{
    private int type = 0;
    public GunsPistol(int type) 
    {
        super(type);
        this.type = type;
    }
}
Класс B:

Java
1
2
3
4
5
6
7
8
public class B 
{
    private int type = 0;
    public GunsPistol(int type) 
    {
        this.type = type;
    }
}
Мне надо, через класс B изменить переменную type в классе А. Возможно-ли такое?

Дело в том, что у меня несколько классов, все они наследуют B. Третий код проверяет:

if([класс] instanceof B)
{
Тут надо изменить [класс]`у пременную type;
}

Добавлено через 2 минуты
Поправил*
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
07.03.2015, 19:59
Ответы с готовыми решениями:

Изменить переменную из класса MainActivity в классе MainRenderer
Ребята подскажите пожалуйста, у менять есть два файла: MainActivity.java import android.opengl.GLSurfaceView; import...

Как изменить переменную в классе, находящуюся в private?
class Figura { private: float storona; float ploshad; public: };

Изменить значение переменной в Родительском классе используя Потомственной класс
Всем привет. Я столкнулся с проблемой при выполнении одного задания. Хочу изменить значение переменной в Родительском классе используя...

22
Почетный модератор
 Аватар для ildwine
6201 / 2963 / 1300
Регистрация: 04.03.2013
Сообщений: 5,797
Записей в блоге: 1
07.03.2015, 20:07
А как на счет поставить в классе A
Java
1
protected int type = 0;
Тогда можно будет обращаться к переменной type
из потомков
Java
1
super.type = ляляля
0
89 / 1 / 3
Регистрация: 04.07.2013
Сообщений: 282
07.03.2015, 20:16  [ТС]
Вы не поняли. Допустим, есть класс С extends B

В другом классе, мне надо сделать так...

Java
1
2
3
4
if(C instanceof B)
{
       Тут надо изменить C пременную type, при этом вместо С может быть и А, и тогда А надо изменить переменную type.
}
0
Почетный модератор
 Аватар для ildwine
6201 / 2963 / 1300
Регистрация: 04.03.2013
Сообщений: 5,797
Записей в блоге: 1
07.03.2015, 20:29
Или я что то не понимаю? Объявляйте ваши объекты классов C, D, E, которые унаследованы от B сразу так:
Java
1
2
A myObjectC = new C();
A myObjectD = new D();
Добавлено через 2 минуты
если потом понадобится расширить тип, то:
Java
1
С myNewObjectC = (C) myObjectC;
Добавлено через 4 минуты
иначе A...

Добавлено через 2 минуты
svk2140, давайте начнем с того что у вас дано:
У меня есть класс А.
public class A extends B
У меня есть класс B.
public class A extends B

Добавлено через 30 секунд
Уже тут ошибка (опечатка)...

Добавлено через 1 минуту
Думаю что класс B таки наследует A, то есть надо удалить в классе A наследование...
1
89 / 1 / 3
Регистрация: 04.07.2013
Сообщений: 282
07.03.2015, 20:31  [ТС]
Да-да-да-да-да))))
Класс B просто B (public class B)

По-моему придумал вариант - зачем делать instanceof, для проверки группы объектов.
Достаточно представить тип объекта переменной, и проверять её, а не делать instanceof, тогда это сократит много кода...
0
Почетный модератор
 Аватар для ildwine
6201 / 2963 / 1300
Регистрация: 04.03.2013
Сообщений: 5,797
Записей в блоге: 1
07.03.2015, 20:41
svk2140, короче разберитесь для начала что у вас A и что B... скиньте новые примеры кода... Тогда будем обсуждать (я потом поправлю первый пост)

Добавлено через 7 минут
svk2140, тогда так:
не???
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
public class Primer
{
    
 
    public static void main(String[] args)
    {
        B myObj1 = new A(1);
        B myObj2 = new A(2);
        B myObj3 = new B(33);
        
        if (myObj1 instanceof A) {
          A myObj11 = (A) myObj1; 
       }
    }
    
}
 
class A extends B
{
    private int type = 0;
    public GunsPistol(int type)
    {
        super(type);
        this.type = type;
    }
}
 
class B
{
    protected int type = 0;
    public GunPistol(int type)
    {
        this.type = type;
    }
}
Добавлено через 2 минуты
То есть я так понимаю...
Если надо сужать тип то нет смысла в приведении типа если вы двигаетесь в сторону суперкласса B. Иначе проверять if (instanceof A), то делаем ссылку на объект как объект класса А
0
89 / 1 / 3
Регистрация: 04.07.2013
Сообщений: 282
07.03.2015, 20:45  [ТС]
А наследует Y
B наследует Y
С наследует Y...

В третем классе, у нас есть проверка [объект] instanceof Y, потом нам надо объекту изменить переменную type, но объект это ещё более основной класс, и переменной type не содержит. А теперь проблема: надо изменить объекту, будь-то это А, В или С переменную type.
0
Почетный модератор
 Аватар для ildwine
6201 / 2963 / 1300
Регистрация: 04.03.2013
Сообщений: 5,797
Записей в блоге: 1
07.03.2015, 20:49
Вот вы уже второй раз меняете терминологию... теперь у нас общий суперкласс Y...

Добавлено через 1 минуту
Java
1
2
3
4
5
6
7
8
9
10
public static void main(String[] args)
    {
        B myObj1 = new A(1); //создаем объект myObj1 класса A, в конструкторе предеаем type = 1, на объект ссылается переменная типа B.
        B myObj2 = new A(2);
        B myObj3 = new B(33);
 
        if (myObj1 instanceof A) {
          myObj1.type = 100500;
       }
    }
0
89 / 1 / 3
Регистрация: 04.07.2013
Сообщений: 282
07.03.2015, 21:01  [ТС]
Так по вашему коду, мы изменим type классу В, а надо классу объекта, при этом он не имеет переменной type, а type есть в классе А или другом классе, который наследует B. Можно-ли как-то обойтись без перебора (A instanceof B), (другой класс instanceof B)?
Пример:
Java
1
2
3
4
5
6
7
8
9
10
11
12
//Получили объект
if(объект instanceof B)
{
    if(объект instanceof A)
    {
         A test = (A) объект;
    }
    if(объект instanceof другой класс)
    {
         другой класс test = (другой класс) объект
    }
}
Можно-ли как-то передать классу B из класса А, this, потом делать так - this.type = 1;?

Добавлено через 11 секунд
Я плохо знаю java, просто)*
0
Почетный модератор
 Аватар для ildwine
6201 / 2963 / 1300
Регистрация: 04.03.2013
Сообщений: 5,797
Записей в блоге: 1
07.03.2015, 21:05
svk2140, если вы всё таки решитесь на использование модификатора protected в родительском классе, тогда поудаляйте свои private методы в потомках вообще, если они не меняют (не переопределяют содержимое метода родительского)...
0
89 / 1 / 3
Регистрация: 04.07.2013
Сообщений: 282
07.03.2015, 21:09  [ТС]
Хм, ещё 1 мысль пришла:
Если изменять в B переменную type, а в А ставить переменную type из B.
Это вроде как костыль... Подожду, может кто-то ответит...
0
Почетный модератор
 Аватар для ildwine
6201 / 2963 / 1300
Регистрация: 04.03.2013
Сообщений: 5,797
Записей в блоге: 1
07.03.2015, 21:14
Цитата Сообщение от svk2140 Посмотреть сообщение
при этом он не имеет переменной type
тогда всё-таки private там... но в родителе извне вы можете сменить только из потомков если стоит protected и никак, если стоит protect... тольео через сеттер в родителе
Java
1
protected void setType(int type) {this.type = type;}
Добавлено через 2 минуты
Сеттер с protected доступен потомкам...
0
89 / 1 / 3
Регистрация: 04.07.2013
Сообщений: 282
07.03.2015, 21:18  [ТС]
Вы меня не понимаете... Даже не знаю, продолжать-ли вам пытаться объяснить мой вопрос...
Была 1 идейка, но она не верная.
Сделать абстрактный метод в B, в A писать то, что должно выполнятся, при этом передавая из B в A type, а третим классом изменять в B type (Потом она будет передаваться А).
Но изменять переменную в абстрактном классе нельзя

Если вы до сих пор не поняли что я хотел спросить, увы, объяснить вам не смогу.
0
Почетный модератор
 Аватар для ildwine
6201 / 2963 / 1300
Регистрация: 04.03.2013
Сообщений: 5,797
Записей в блоге: 1
07.03.2015, 21:36
svk2140, в вашем случае абстрактный и неабстрактный классы B отличаться не будут вообще никак, кроме того что нельзя будет создать объект класса B...

Добавлено через 18 секунд
Идея бредовая... не туда копаете...

Добавлено через 3 минуты
Если я вас правильно понимаю, то задача обстоит так: Есть суперкласс B. У него есть приватная переменная type... Есть потомки класса B... И есть класс Tester, который создает объектны классов потомков класса B и в зависимости от того какой у них класс, надо поменять переменную в классе родителе (суперклассе В)

Добавлено через 2 минуты
почему бы не объявить сеттер в классе B который выставляет значение в переменной... ну он тогда должен быть паблик...

Добавлено через 3 минуты
svk2140, вы объясните, зачем столько всего... Это у вас задание или вы это для себя пишете... если для себя то надо 10 раз подумать... чтобы продолжать...

Добавлено через 4 минуты
Принцип инкапсуляции в том, что если переменная объявлена в классе как private, то ее никто не должен видеть и вообще про нее знать... Даже про то что ее можно изменить никто не должен знать... Даже если этот кто-то ваш друг, вы должны оставить в тайне и от него реализацию вашего класса B. Он, тот кто использует ваш класс должен знать методы getName, setName, которые доступны для "несекретных" переменных типа private... Если переменная собирается использоваться потомками можно написать протектед getMyVariable(); но дальше нет смысла... ибо третий код не может ниче сделать с вашими методами внутри класса B...
0
2884 / 2296 / 769
Регистрация: 12.05.2014
Сообщений: 7,978
07.03.2015, 21:37
Догадываюсь что у него на уме.
Куча оружия, у каждого свои параметры. Он хочет создавать объекты класса оружие, но что-бы начинка работала по разному.
Я помню этого человека по теме из с++ раздела, поэтому не берусь даже пытаться ему объяснить что такое интерфейсы и абстрактные классы.
0
89 / 1 / 3
Регистрация: 04.07.2013
Сообщений: 282
07.03.2015, 21:40  [ТС]
Эм, вы помните меня? Я тут был 3-4 года назад, в последний раз.
0
Почетный модератор
 Аватар для ildwine
6201 / 2963 / 1300
Регистрация: 04.03.2013
Сообщений: 5,797
Записей в блоге: 1
07.03.2015, 21:40
Паблито, Мы тут уже посовещались, а не посоветовать ли ТСу использовать фабрику...
0
07.03.2015, 21:42

Не по теме:

Цитата Сообщение от svk2140 Посмотреть сообщение
Эм, вы помните меня?
да, и пусть дата моей регистрации на форуме вас не смущает :)

0
89 / 1 / 3
Регистрация: 04.07.2013
Сообщений: 282
07.03.2015, 21:58  [ТС]
Надо сначала разобраться в архитектуре игры для которой я пишу мод, а потом уже пытаться что-то объяснить.
Пишу мод для майнкрафта, но, поступает Item, но каким-то раком он содержит информацию о том, какой наследник это, и можно проверить (Item instanceof Guns).

Добавлено через 29 секунд
Ты кто-то из моих знакомых, Паблито?)

Добавлено через 14 минут
И вы совершенно меня не поняли, это видно по названию темы...
0
Почетный модератор
 Аватар для ildwine
6201 / 2963 / 1300
Регистрация: 04.03.2013
Сообщений: 5,797
Записей в блоге: 1
07.03.2015, 21:59
svk2140, фабрика оружия:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
public class Primer {
    public static void main(String[] args)
    {
        //Создадим фабрикку
        GunsFactory gf = new GunsFactory();
        //создадим Пулемет
        B pulemet = gf.getNewGun("Пулемет");
        B pistolet =gf.getNewGun("Пистолет");
    }
}
 
class GunsFactory
{
    public B getNewGun(String GunType)
    {
        if (GunType.equals("Пистолет"))
        {
            return new A(1); //1 == пистолет
        } else if (GunType.equals("Пулемет"))
        {
            return new C(2);
        }
        else System.out.println("Неверный ввод!");
    }
}
 
class A extends B     //пистолет
{
    public A(int type)
    {
        super(type);
    }   //пистолет
}
 
class C extends B {
    public C(int type)
    {
        super(type);
    }     //пулемет
 
}
 
abstract class B
{
    protected int type;
    public B(int type) {
        this.type = type;
    }
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
07.03.2015, 21:59
Помогаю со студенческими работами здесь

Нельзя изменить type inputa через attr
Всем привет. Делаю форму авторизации и в поле пароль по умолчанию typy inputa стоит password но у меня есть иконка называется показать...

Изменить поле в классе через аргумент события
Нужно через аргумент события e.Change изменить поле changeCode в классе FlowchartTE Это как это можно сделать? Или все же придется...

Изменить переменную через функцию
скажите как объявить переменную что б она читалась во всех функциях вот что у меня не получилось global k k=2 def...

Как обьявить переменную в одном классе и что бы ее было видно в дочернем классе
У меня есть основной класс с названием Root один из его членов наследует дочерний класс SubRoot. Скажите как объявить, что бы один из...

Изменить переменную класса через указатель
В данном примере я получаю указатель на переменную объекта. Я хочу изменить указатель, т.е. не само значение переменной на которую...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и напряжениями. Надо найти токи в ветвях. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и решает её. Последовательность действий:. . .
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru