Как изменить значения свойств дочерних классов - PullRequest
0 голосов
/ 03 апреля 2019

Это общий вопрос. Я не могу найти правильный ответ, вероятно, потому что я не знаю, что написать в своем браузере, чтобы получить хорошие результаты:

Если у меня есть один класс A

    public abstract class Base {
        String prop1;
        int prop2;
    }

Я хочу создать два подкласса B и C, которые расширяют A:

    public class B extends A {
        String prop3;            
    }

    public class C extends A {
        String prop4;            
    }

Основной класс

    A b = new B();
    A c = new C();

Мой вопрос. Как можно изменить значение свойств prop3 и prop4?

Когда я пишу b., Intellisense показывает только prop1 и prop2 для автозаполнения, и я не могу написать, например, b.prop3, потому что я получаю ошибку. Я пытаюсь использовать приведение типа (B) б. и я получаю тот же результат.

1 Ответ

1 голос
/ 03 апреля 2019

потому что я получаю ошибку. Я пытаюсь использовать приведение типа (B) б. и я получаю тот же результат.

Помогает читать ошибки. Вы получаете ошибку приведения класса? Свойство не видна ошибка? а несвязанная ошибка из-за опечатки?

Чтение ошибки скажет вам точно.

Прямо сейчас вы объявили 'a' и 'b' как класс 'A'. Чтобы получить доступ к свойствам классов «B» и «C», вам придется либо привести переменные как «B» и «C», либо объявить их как «B» и «C».

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

Предположим, например, что у B есть геттер для 'prop3', вы можете использовать:

((B) b).getProp3();

Чтобы избежать предупреждения о сотворении класса, вы можете сделать:

if (b instanceof B)
{
    ((B) b).getProp3();
}

Однако всякий раз, когда вам нужно сделать вышеуказанное, вы должны переосмыслить свой дизайн. Старайтесь избегать этого всякий раз, когда это возможно

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...