Как установить унаследованную переменную в Java? - PullRequest
1 голос
/ 14 октября 2011
public class Atribut {
int classid;

@Override public String toString() {
return Integer.toString(classid);


}

}

Я создал этот класс, который переопределяет метод toString (). Я планирую сделать много подклассов с разными classid. Проблема в том, что я не знаю, как установить переменную classid для работы в методе toString.

public class cas extends Atribut{
int classid=2;


}

Проблема в том, что если я создаю объект cas и метод toString, он возвращает «0», а не «2». ??

Ответы [ 4 ]

8 голосов
/ 14 октября 2011

Мой предпочтительный метод для такого рода вещей - использовать аргументы конструктора:

public class Parent {
    // Using "protected final" so child classes can read, but not change it
    // Adjust as needed if that's not what you intended
    protected final int classid;

    // Protected constructor: must be called by subclasses
    protected Parent(int classid) {
        this.classid = classid;
    }

    @Override
    public String toString() {
        return Integer.toString(classid);
    }
}

public class Child extends Parent {
    public Child() {
        // The compiler will enforce that the child class MUST provide this value
        super(2); 
    }
}
3 голосов
/ 15 октября 2011

Как и рекомендуется @java_mouse, просто используйте переменную родительского класса.

public class Atribut {
    protected int classid;

    public Atribut() {
        classid = 0;
    }

    @Override
    public String toString() {
        return Integer.toString(classid);
    }    
}

public class Cas extends Atribut{
    public Cas() {
        classid = 2;
    }
}

Установите значение classid в конструкторе, и тогда вы сможете просто использовать суперкласс toString().

2 голосов
/ 14 октября 2011

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

Если вы хотите это сделать, я бы сделал это

class Atribut {
    int classid = 0;

    protected int classid() { return classid; } // points to Attribut.classid
    public String toString() {
        return Integer.toString(classid());
    }

}

Затем в своем дочернем классе вы можете переопределить метод

class cas {
    int classid = 2;
    protected int classid() { return classid; } // points to cas.classid
}
1 голос
/ 15 октября 2011

Почему вы хотите скрыть переменную в дочернем классе, если она уже доступна в родительском классе?почему бы не использовать одну и ту же переменную?

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

...