如何在java中设置继承变量?

时间:2011-10-14 19:36:49

标签: java class inheritance extends

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 个答案:

答案 0 :(得分:8)

我喜欢这种方法的技巧是使用构造函数参数:

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); 
    }
}

答案 1 :(得分:3)

就像@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 :(得分:2)

当您隐藏变量时,父类中的变量将用于那里的方法。

如果你想这样做,我会这样做

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
}

答案 3 :(得分:1)

如果父类中已存在变量,为什么要在子类中隐藏变量?为什么不使用相同的变量?

如果您使用相同的变量,则问题会自动解决。如果必须继承属性,请不要复制该属性。