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

Возможно, я просто не смогу найти нужные слова в Google, но не могу найти ответ на следующий вопрос.

Можно ли явно установить суперкласс нового экземпляра класса. Например. У меня есть экземпляр SuperClazz, и я хочу создать новый экземпляр Clazz, который расширяет SuperClazz. Могу ли я просто сделать что-то вроде этого (код это то, что я хочу сделать, он не компилируется и не является правильным):

    class Clazz extends SuperClazz{

Clazz(SuperClazz superInstance){
    this.super = superInstance;
}
}

Ответы [ 3 ]

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

Вы смешиваете наследование и делегирование.Когда объект вызывает

super.doThis();

, он не вызывает doThis для другого объекта, который имеет тип суперкласса объекта.Это вызывает это на себе.this и super - это одно и то же.super просто позволяет получить доступ к версии метода, определенной в суперклассе и переопределенной в подклассе.Таким образом, изменение супер экземпляра не имеет смысла: супер экземпляра не существует.

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

Суперкласс всегда создается неявно, поэтому вы не можете этого сделать - «посадить» суперкласс внутри расширяющегося класса.Вероятно, вам нужен конструктор копирования.

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

Я думаю, что у вас есть какое-то недопонимание в смысле или терминах, которые вы используете.

Экземпляр (или объект) - это то, что вы создаете, используя new Clazz() во время выполнения. Вы не можете изменить его (если вы не используете приемы модификации байтового кода). Что вам действительно нужно, так это создать 2 класса: базовый класс и его подкласс. Вот самый простой пример.

class SuperClazz {
}

class Clazz extends SuperClazz {
}

Если вы хотите вызвать конструктор суперкласса exlplitly из конструктора подкласса, используйте super(): класс Clazz расширяет SuperClazz { public Clazz () { супер(); } }

...