java - 子类中的成员阴影

标签 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 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()
}

我的问题是关于“AAA”行的。此处的目标是避免在每次引用时都强制转换从父类(super class)继承的上下文成员。换句话说,我宁愿

context.additionalMethod()

代替

((SomeBar)context).additionalMethod()

每次。

这种方法似乎可行,但我想知道它是否正确,或者这样做是否有任何问题。就我而言,这不会导致模棱两可,尽管我可以看出一般情况下会发生什么。

此外,我只是想确保我不是在此处创建新对象,而是让方法以不同方式解释 context 引用成员。

我想另一种方法是将 context 重命名为类似 rawContext 的名称,这可能更可取。

提前致谢

最佳答案

这是使用泛型的经典案例:

abstract class AbstractFoo<T extends IBar>
{
    protected T context;
    // some default impl
}

然后

class SomeFoo extends AbstractFoo<SomeBar> 
{
    // access context directly as type SomeBar
}

关于java - 子类中的成员阴影,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15492910/

相关文章:

java - 如何将文本内容另存为 jcr :data property in aem?

C++构造函数继承(从派生类调用构造函数)

java - 现场阴影还是覆盖?

java.lang.StackOverflowError 导致我的应用出现问题

java - Android studio gradle 同步错误与 firebase : Response 204: No Content has no content

html - CSS 中继承和特殊性的混淆

java - Java 中的构造函数保证了哪些属性?

haskell - 绑定(bind)怎么可能遮蔽 `case of` block 中的现有绑定(bind)?

Scala 方法中变量名不明确

javafx 8 兼容性问题 - FXML 静态字段或方法