Наследование статических переменных в Java - PullRequest
3 голосов
/ 07 февраля 2012
public class Base{
        protected String str;

    public static final Base ERROR = new Base("error");
...
}

public class Derived extends Base{
        public static final Derived OTHER = new DERIVED("other");
        public Derived(String str) {
        super(str);
        }
    }

Derived page = Derived.OTHER; //OK
page = (Drived)Derived.ERROR; //ClassCastException

Так можно ли привести статическую переменную-член из базового в производный класс?

Ответы [ 5 ]

12 голосов
/ 07 февраля 2012

Вы не можете.

Невозможно привести Derived.ERROR к Derived, поскольку это не экземпляр Derived.Это экземпляр Base.

. Это может помочь устранить путаницу, чтобы понять, что Base.ERROR и Derived.ERROR - это два способа ссылаться на один и тот же объект.

4 голосов
/ 07 февраля 2012

Derived.ERROR относится к тому же объекту, что и Base.ERROR, и этот объект относится к классу Base, поэтому он не может быть приведен к Derived.

1 голос
/ 07 февраля 2012

Родитель не может быть брошен на ребенка.Это может быть просто понято следующим примером:

public class Parent
{
    public void parentMethod() { }
}


public class Child extends Parent
{
    public void childMethod() { }
}

   .....
Parent parent = new Parent();

Так что, если мы смогли привести Parent объект к Child, что означает, что мы можем вызвать childMethod() для parent объекта, которыйневерный, поскольку объект parent имеет тип Parent, у которого нет метода childMethod().

Надеюсь, мое объяснение не сбивает с толку.

0 голосов
/ 07 февраля 2012

Нет ... Вы не можете сделать это .. Как вы должны сделать это экземпляром класса извлечения .. не базовым классом

0 голосов
/ 07 февраля 2012

статическая переменная привязана не к экземпляру, а к классу

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