gpt4 book ai didi

java - 子类中的成员阴影

转载 作者:搜寻专家 更新时间:2023-11-01 02:48:57 25 4
gpt4 key购买 nike

考虑以下示例大纲:

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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com