Java 子类中的成员阴影
考虑以下示例大纲:Java 子类中的成员阴影,java,inheritance,shadowing,Java,Inheritance,Shadowing,考虑以下示例大纲: interface IBar{ /*...*/ } class SomeBar implements IBar { /*...*/ } abstract class AbstractFoo { IBar context; /* Some default implementations of methods manipulating 'context' */ } class SomeFoo extends AbstractFoo { final
interface IBar{ /*...*/ }
class SomeBar implements IBar { /*...*/ }
abstract class AbstractFoo
{
IBar context;
/* Some default implementations of methods manipulating 'context' */
}
class SomeFoo extends AbstractFoo
{
final SomeBar context = (SomeBar)super.context; // <-- AAA
/* Some methods that reference additional non-IBar methods. */
// The line AAA allows us to use:
// context.additionalMethod()
// instead of
// ((SomeBar)context).additionalMethod()
}
而不是
((SomeBar)context).additionalMethod()
每一次
这种方法似乎有效,但我想知道它是否正确,或者这样做是否有任何问题。在我的例子中,这不会导致歧义,尽管我可以看到它在总体上是如何产生的
另外,我只想确保我没有在这里创建新对象,而是让方法以不同的方式解释上下文
引用成员
我想另一种方法是将context
重命名为类似rawContext
,这可能更可取
提前感谢这是使用泛型的经典案例:
abstract class AbstractFoo<T extends IBar>
{
protected T context;
// some default impl
}
抽象类AbstractFoo
{
受保护的上下文;
//一些默认的impl
}
然后
类SomeFoo扩展了AbstractFoo
{
//直接以SomeBar类型访问上下文
}
您在IBar
中是否有附加方法
方法?@Apurv:没有,附加方法
不在IBar
中。哇,这种方法是一种令人大开眼界的方法。谢谢
abstract class AbstractFoo<T extends IBar>
{
protected T context;
// some default impl
}
class SomeFoo extends AbstractFoo<SomeBar>
{
// access context directly as type SomeBar
}