Рассмотрим следующий пример: контурЧлен затенения в подклассе
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()
}
Мой вопрос о линии «ААА». Цель здесь состоит в том, чтобы избежать необходимости использовать член контекста, унаследованный от суперкласса, каждый раз, когда он ссылается. Другими словами, я бы скорее
context.additionalMethod()
вместо
((SomeBar)context).additionalMethod()
каждый раз.
Этот подход, похоже, работает, но мне интересно, правильно ли оно, или если есть какие-то проблемы с выполнением чего-то подобного. В моем случае это не привело бы к двусмысленности, хотя я мог видеть, как это может быть в целом.
Кроме того, я просто хочу убедиться, что я не создаю здесь новый объект, но, скорее, методы интерпретируют ссылочный элемент context
по-разному.
Я полагаю, что альтернативой было бы переименование context
на что-то вроде rawContext
, что может быть предпочтительнее.
Заранее спасибо
У вас есть 'метод additionalMethod' в' IBar'? – Apurv
@Apurv: no, 'extraMethod' не находится в' IBar'. – jedwards