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.
您不能以覆盖方法的方式"覆盖"字段.您需要使用方法重写来实现此行为.例如:
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)
编辑:根据您的评论:
Foo的var是类型List<String>,和B的var类型为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)
不要过于字面地使用这个代码 - 只是建议可能的设计.
| 归档时间: |
|
| 查看次数: |
2030 次 |
| 最近记录: |