隐藏子类中超类的字段

ter*_*ell 4 java field mask superclass

假设我有3个班级:

class Foo
{    
    protected String var;
    public void doSomething()
    {
         // does something with var
    }
}

class A extends Foo
{
    public void doSomething()
    {
        // uses var slightly differently to Foo
    }
}

class B extends Foo
{
    protected int var; // hides Foo's var field
    public void doSomething()
    {
        // does something with B's var, but still in a similar fashion to Foo
    }
}
Run Code Online (Sandbox Code Playgroud)

在这种情况下,我知道并希望B的var字段隐藏Foo并仍然以类似的方式使用(打印其值或执行某些计算或其他).
故意隐藏字段会使代码难以阅读,但这是一个例外,还是只是糟糕的设计?

编辑:
我确实希望A从Foo继承'var',但我也希望B继承除var之外的所有内容.

编辑2:
忘记将访问修饰符添加到var.

Pau*_*ora 5

您不能以覆盖方法的方式"覆盖"字段.您需要使用方法重写来实现此行为.例如:

class Foo
{    
    private String var;

    Object getVar() {
        return var;
    }
}

class B extends Foo
{
    private int var;

    @Override
    Object getVar() {
        return var;
    }
}
Run Code Online (Sandbox Code Playgroud)

编辑:根据您的评论:

Foovar是类型List<String>,和Bvar类型为List<Item>,其中Item是一个单独的类都在一起.正如您所知,两者都使用列表但使用不同的模板类型,并且两者仍然执行相同的操作(浏览列表并对元素执行某些操作)

听起来你的类应该是通用的,例如:

abstract class Foo<T> {

    List<T> list;

    // common logic
}

class A extends Foo<String> { }

class B extends Foo<Item> { }
Run Code Online (Sandbox Code Playgroud)

不要过于字面地使用这个代码 - 只是建议可能的设计.