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
}