Java экземпляр суперкласса для экземпляра подкласса - PullRequest
0 голосов
/ 29 декабря 2011

Я хочу передать экземпляр суперкласса конструктору подкласса. Моя первая идея состояла в том, чтобы поменять экземпляр суперкласса в подклассе, похожем на прототипы javascripts, но мне сказали здесь , что Java не поддерживает обмен ссылками на суперэкземпляр, потому что нет суперэкземпляра per se.

Чтобы обойти эту проблему, я хочу использовать конструктор копирования, который принимает экземпляр суперкласса. Затем мне придется заново связать все ссылки вручную, что в конечном итоге вызовет ошибки, когда другие люди расширят код суперкласса и забудут конструктор копирования в подклассе.

Вопрос: Есть ли какой-нибудь аккуратный и удобный способ автоматически скопировать все ссылки, возможно, с помощью некоторого механизма отражения, чтобы предотвратить будущие ошибки?

1 Ответ

1 голос
/ 29 декабря 2011

Не следует копировать все ссылки из экземпляра суперкласса в экземпляр подкласса.Кстати, все эти ссылки не должны быть даже доступны из подкласса, если они объявлены как частные поля в суперклассе (как и должно быть, как правило).

Что вам, вероятно, нужно, это делегирование, а не наследование:

// Foo is the superclass
private class FooAdapter {
    private Foo foo;

    public FooAdapter(Foo foo) {
        this.foo = foo;
    }

    public void doThis() {
        return foo.doThis();
    }
}

FooAdapter может расширять Foo или (лучше) реализовывать общий интерфейс, но это не обязательно необходимо.

Если это не решит вашу проблему, скажите нам, что вы хотите сделать, вместо того, чтобы рассказывать, как вы хотите это сделать.Какую проблему вы хотите решить?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...