Могу ли я получить доступ к статическим переменным-членам, определенным в подклассе, из метода абстрактного суперкласса? - PullRequest
2 голосов
/ 18 августа 2010

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

Когда вызывается метод, переменная преобразуется в тот, что в моем абстрактном базовом классе, а не в производный класс.Нужно ли мне украшать свойство производного класса атрибутом?

Я пытаюсь сделать что-то, что не поддерживается в Java, или я просто что-то упускаю?

Ответы [ 3 ]

12 голосов
/ 18 августа 2010

Вы пытаетесь сделать что-то, что не поддерживается. Поля не могут быть "переопределены" - и статические члены не ведут себя полиморфно.

Вместо этого создайте абстрактные свойства , которые можно реализовать в производных классах. Это должны быть свойства instance , даже если они возвращают статические переменные.

2 голосов
/ 18 августа 2010

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

abstract class Foo {
  static private final String someValue = "blah";

  String getSomeValue() {
    return someValue;
  }

  public abstract void someMethod();
}

class Bar extends Foo {
  String getSomeValue() {
    return "somethingElse";
  }

  public void someMethod() {
    String x = getSomeValue();
  }
}
0 голосов
/ 18 августа 2010

В зависимости от того, что вы хотите сделать, вы можете сделать:

    Base b = new Sub();
    System.out.println(b.myInt); // will print myInt from Base

    Sub s = new Sub();
    System.out.println(s.myInt); // will print myInt from Sub

, но вы, вероятно, захотите подход Джона.

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