Обход поля слежки

1

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

abstract class Super {
   String name;

   String getName() {
       return name;
    }
}

Теперь я создаю подклассы, каждый из которых имеет свое "имя".

class Sub extends Super {
    name = "Subclass";
}

Однако создание экземпляров подкласса, а затем вызов унаследованного метода getName() приведет к null из-за затенения поля.

Есть ли простой способ избежать этой проблемы и позволить каждому подклассу иметь уникальное поле, к которому можно получить доступ с помощью унаследованного метода?

Теги:
inheritance
field
override
shadowing

2 ответа

0

Вы можете попробовать этот механизм (бонус оставлен читателю, расширьте код, чтобы получить имя класса напрямую). В коде используется конструктор абстрактных классов для установки имени. Вы также можете определить функцию setName в классе Super и использовать это.

Суперкласс (аннотация)

package stackShadow;
public abstract class Super {
    String name;

    public Super(String name) {
        this.name = name;
    }

    public String getName() {
        return name;
    }
}

Первый подкласс класса Shadow1

package stackShadow;
public class Shadow1 extends Super {
    public Shadow1() {
        super("Shadow1");
    }
}

Второй подкласс класса Shadow2

package stackShadow;
public class Shadow2 extends Super {
    public Shadow2() {
        super("Shadow2");
    }
}

Тест-класс для проверки getName- пакета stackShadow;

public class Test {

    public static void main(String[] args) {
        Shadow1 one = new Shadow1();
        Shadow2 two = new Shadow2();

        System.out.println("Name for one is: " + one.getName());
        System.out.println("Name for two is: " + two.getName());

    }

}
0

Сделать поле видимым в дочернем классе и инициализировать его в конструкторе подкласса или в инициализаторе экземпляра подкласса.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню