Студопедия
Случайная страница | ТОМ-1 | ТОМ-2 | ТОМ-3
АрхитектураБиологияГеографияДругоеИностранные языки
ИнформатикаИсторияКультураЛитератураМатематика
МедицинаМеханикаОбразованиеОхрана трудаПедагогика
ПолитикаПравоПрограммированиеПсихологияРелигия
СоциологияСпортСтроительствоФизикаФилософия
ФинансыХимияЭкологияЭкономикаЭлектроника

Using inheritance Использование наследования

Creating optional variables | Creating optional variables Создание дополнительных переменных | Defining and using enumerations | Defining and using enumerations | Writing closures | Writing closures Написание закрытия | Defining and instantiating classes | Defining and instantiating classes Определение и создание экземпляра классы | Adding initializers to a class | Adding initializers to a class Добавление инициализаторами к классу |


Читайте также:
  1. A form of cryptosystem in which encryption and decryption are performed using the same key. Also known as conventional encryption.
  2. Answer the following questions using your own words but taking into account the
  3. C) Interview your partner using the questions in
  4. Choose a verb from the list and complete the text using Past Continuous or the Past Simple.
  5. Complete the following sentences using an appropriate form of the verb.
  6. Creating and using arrays
  7. Creating and using arrays Создание и использование массивов

 

- На наследования.Ключевым моментом объектно-ориентированного является повторное использование и расширить код между классами. Так при создании нового класса в Swyft мы можем наследовать от существующего в письменной форме толстой кишки после нашего нового имени класса с последующим класса мы хотим, чтобы наследовать. Теперь с отношениями наследования некоторые языки используют такие термины, как базовый класс, и производного класса, или даже родителей и дочернего класса. В Swyft, как и во многих языках, мы говорим, супер класс и суб-класс. Так что это мой новый класс здесь, PremierPlayer.

Мы в наследство от игрока. Это супер класс, наш новый класс класс к югу. Мы все еще можем думать о толстой кишке смысл типа, так PremierPlayer является тип игрока. Теперь просто делать это мы хотели бы получить все свойства и методы суперкласса. Так что сейчас, ничего не добавляя к этому определению класса я могу идти вперед и экземпляр новые объекты этого типа класса. Так newPlayer является PremierPlayer. Я могу использовать инициализатор, что она имеет. Я сразу же иметь доступ к методу описания, у меня есть доступ к имени имущества, а также оценка недвижимости.

Но на самом деле нет никакого смысла наследовать, если я не собираюсь изменять и расширять в некотором роде. Так что я могу добавить новый метод к новому классу. Добавим один называется calculateBonus. Это ничего не вернется, но это будет изменить счет и добавить тысяч до него, а затем распечатать сообщение о новом счете. Теперь то, что мы найдем то, что сразу же станет доступным для экземпляров нового класса PremierPlayer. Мы будем иметь метод calculateBonus, но здесь, где я просто создание нормальный игрок не будет иметь доступ к этому методу.

Мы просто не найдете. Но что еще? Ну мы также можем пойти дальше и добавить новые свойства этого класса. Тем не менее, мы собираемся выполнить немедленно в одном вопросе. Так что я буду добавлять новую переменную с именем memberLevel и это тип строки. Я сразу же увидите эта ошибка выскочит, потому что проблема, когда я добавить новое свойство, новый кусок данных к классу югу, и это не имеет значения по умолчанию, и я не дали его значение по умолчанию, то инициализатор, что мы использовали здесь создание нового PremierPlayer просто проходил в имени, что инициализатор был определен в родительском классе.

Это то, что один здесь, проходит в строке, устанавливает, что имя свойства, и устанавливает оценка имущества.Вопрос, добавив дополнительные данные, хорошо, что Инициализатор не достаточно хорош больше, потому что это только инициализации свойства, определенные в родительском классе, она не собирается инициализировать наши дополнительные данные. Теперь у меня есть несколько вариантов здесь. Одним из них является Я мог бы привести значение по умолчанию, на самой переменной в нашем новом классе. Это сделало бы ошибка исчезнет.Другой вариант заключается в предоставлении нашу собственную инициализатору в этом новом классе, но теперь несколько дополнительных шагов для этого, потому что мы находимся в отношениях наследования.

Так внутри нового класса я собираюсь идти вперед и добавить инициализации и как только я это сделать, мы собираемся, чтобы получить другую ошибку, потому что инициализации существует и в супер класса и подклассов сейчас и есть потенциал для непонимания, Теперь, если я нажму ошибку, Xcode собирается предложить исправить, что мы должны добавить ключевое слово переопределения, и это путь, который мы будем делать это Swyft. Мы должны явно сказать, когда мы хотим заменить автоматически наследуются поведение от суперкласса с нашей собственной более специализированное поведение в классе югу.

Теперь это еще один безопасность особенностью Swyft. Мы должны быть ясными с этим коррекции ключевое слово всякий раз, когда мы заменяем поведение от суперкласса.Компилятор будет проверять этот. Вам будет предложено мне, чтобы добавить ключевое слово переопределения, если я пропустил его, и он не позволит мне добавить ключевое слово переопределения, если то, что я пытаюсь переопределить на самом деле не существует в родительском классе. Так что теперь внутри этой перегруженной инициализаторе я собираюсь добавить строку, чтобы дать моему дополнительное свойство новое значение. Так установлено memberLevel свойство золота.

Но у нас еще есть ошибки. Просто добавить некоторую ясность здесь я иду закомментировать несколько строк ниже, чтобы мы могли получить вещи отсортированные здесь. Я вижу ошибку на коррекции инициализации. Это говорит мне, что Super.init не называется до возвращения из инициализаторе. Эта ошибка поворачивает вверх, потому что мы действительно не хочу, чтобы полностью заменить инициализатору в супер класс, мы хотим добавить к нему. Таким образом, мы время предложено, чтобы убедиться, что мы предоставляем нашу собственную дополнительное поведение в нашем новом переопределенном инициализаторе, и тогда мы сможем пойти и сказать Swyft пойти и сделать оригинальный поведение в супер класс в любом случае.

Мы делаем это путем добавления super.init. Мы совершаете звонок из нашего класса PremierPlayer в нашей супер класс, который плеер и призывая в этом случае инициализатор по умолчанию. Эта идея не только верно для инициализаторах, это верно для любого метода. Если, например, в моем новом классе я хотел расширить поведение существующего метода описания, что было в моей супер-классом, это один здесь, что говорит игрока есть счет в любой счет, ну что я могу сделать, что довольно легко.

В моем новом классе я могу начать вводить имя и он может показать мне, что есть описание метод, который возвращает строку. Если я просто нажмите вернуть то, что он собирается сделать, это дать мне всю подпись для переопределения это правильно, так что коррекция Описание FUNC. Теперь в отличие от инициализатором, когда я перекрывая нормальный метод, который я может полностью заменить поведение в родительском классе. Я не должен сделать вызов супер точка-либо, хотя часто бывает полезно. Так что давайте говорить, что я просто хочу немного более подробное сообщение в этой новой специализированного класса к югу.

Так что я собираюсь сделать вызов метода описания, что уже определено в классе игроков, и я получу это. Итак, давайте оригинальный метод все возвращается из вызова super.description. Тогда я буду просто использовать немного интерполяции строк, чтобы создать более длинное сообщение. Таким образом, чтобы вернуть исходное сообщение и все, золотой уровень, серебро уровень, член. Это должно быть полностью нормально для этого описания опции здесь. Теперь давайте идти вперед и проверить это и, чтобы убедиться, мы получаем новый объект игрока создается.

Один из вопросов, здесь, потому что в моей нового класса я переопределить инициализатор, но я только предоставил один с пустыми скобками здесь, то теперь жалуются, что я не могу инициализировать эту дополнительную часть информации, потому что это не наследование что дополнительный инициализации сейчас. Это нормально.Так, что я хочу, чтобы это работало, я могу просто удалить это. Мы можем создать PremierPlayer с нашей новой инициализаторе, а затем проверить тот факт, что он работает, мы напишем из newPlayer.description.

Вот то, что я ожидал увидеть это перегруженной версии из той, которая включает в себя поведение в верхний, так игрока John Doe имеет оценку 0 и Золотой участник в отличие от вызова его с обычным классом ниже, на которых просто сказать игрока John Doe имеет оценку 0. Таким образом, это является основной переопределения. Теперь, если я сделал один, чтобы предотвратить поведение в супер класса, сказать, что я получил этот метод, и я думаю, этот метод описание очень хорошо, и я хочу, чтобы убедиться, что никто не отменяет его в классе югу, я могу сделать это, добавивокончательный ключевым словам перед ним.

Это теперь будет вызывать ошибку ниже. Это будет сказать мне метод экземпляра пытается переопределить один, который определен как окончательный, вы не можете изменить это. Ну это нормально, я иду, чтобы удалить это. Вы даже можете пометить весь класс как финал. Я мог бы на самом деле отметить это как окончательное классный игрок, и было бы остановить эту попытку наследство от вообще происходит. Это не обязательно, чтобы это произошло все время, но это хорошо, чтобы знать, что вы можете сделать, если вам нужно, чтобы предотвратить его. Одна последняя вещь, в отличие от многих других языках, в том числе Objective-C, в классах Swyft не наследуют из универсального базового класса по умолчанию.

Так что, если вы пишете класс как этого класса плеер тут без двоеточия после него, рассматривается в качестве базового класса в себе и это не тайно наследуют от чего-то еще за кулисами.

 

 


Дата добавления: 2015-08-20; просмотров: 152 | Нарушение авторских прав


<== предыдущая страница | следующая страница ==>
Using inheritance| Creating computed properties

mybiblioteka.su - 2015-2024 год. (0.01 сек.)