Swift基礎語法: 30 - Swift的基類, 子類, 重寫, 重寫方法, 重寫屬性, 防止重寫

前面我們講了有關于腳本語法的基本認識以及使用, 現在讓我們來看看Swift的其他東西:


1.基類

所謂的基類, 就是OC中的父類, 不繼承任何類, 就叫做基類, 讓我們來看看例子:

class Vehicle {var currentSpeed = 0.0var description: String {return "traveling at \(currentSpeed) miles per hour"}func makeNoise() {}
}let someVehicle = Vehicle()
println("someVehicle: \(someVehicle.description)")
// 打印出來的結果: someVehicle: traveling at 0.0 miles per hour

PS: 這個類雖然是沒有什么意義, 但它的的確確是一個基類, 在Swift中, 如果你沒有在這個類名后面繼承與什么什么類, 那么就會自動的變成基類.


2.子類生成

所謂的子類, 其實和OC中的子類一樣的, 它是基于基類所新建的一個類, 這個類就叫做子類, 它擁有父類的所有特性, 同時它又可以有屬于自己的特性, 下面讓我們來看看例子:

class Bicycle: Vehicle {var hasBasket = false
}let bicycle = Bicycle()
bicycle.hasBasket = true
bicycle.currentSpeed = 15
println("bicycle: \(bicycle.description)")
// 打印出來的結果: bicycle: traveling at 15.0 miles per hour

PS: 上面的例子就是Vehicle類的子類, 它繼承與Vehicle的所有特性, 可以調用Vehicle類里面的變量, 方法,等等, 同時它又有自己的屬性.


3.重寫方法

在子類中, 雖然擁有父類的所有特性, 但在實際開發中, 有一些特殊的情況, 父類的方法不能滿足于子類的需求, 但我們又不想去更改父類的方法, 那么我們可以選在在子類里去重寫父類的方法, 比如:

class Car: Vehicle {var gear = 1override var description: String {return super.description + " in gear \(gear)"}
}let car = Car()
car.currentSpeed = 25.0
car.gear = 3
println("Car: \(car.description)")
// 打印出來的結果: Car: traveling at 25.0 miles per hour in gear 3

PS: 沒錯, 有些眼睛犀利的朋友就看到了, 在Car這個子類里, 有一個方法名和父類的方法名是一樣的, 但在這個方法名前面, 加了一個override這個關鍵字, 這個就是Swift中的重寫關鍵字.


4.重寫屬性

在Swift中, 既然能重寫父類的方法, 那當然也是可以重寫父類的屬性了, 讓我們來看看例子:

class SpeedLimitedCar: Car {override var gear: Int {get {return super.gear}set {super.gear = 2}}
}
let limitedCar = SpeedLimitedCar()
limitedCar.gear = 60println("SpeedLimitedCar: \(limitedCar.gear)")
// 打印出來的結果: SpeedLimitedCar: 2

PS: 這里需要注意一點的就是, 必須通過get和set這種特性的方式來重寫父類的屬性.


5.防止重寫

在上面的例子中, 如果我有某個類的屬性或者方法不想被重寫, 只要在基類定義的時候在前面加一個final關鍵字就可以防止被重寫, 下面讓我們來看看例子:

class Car: Vehicle {final var gear = 0final override var description: String {return super.description + " in gear \(gear)"}
}class SpeedLimitedCar: Car {override var description: String {return "重寫了"}override var gear: Int {get {return super.gear}set {super.gear = 2}}
}
// 報錯: Var overrides a 'final' var

報錯


好了, 這次我們就講到這里, 下次我們繼續~

轉載于:https://www.cnblogs.com/iOSCain/p/4529358.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/376138.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/376138.shtml
英文地址,請注明出處:http://en.pswp.cn/news/376138.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

機器學習1k近鄰

自己一直學習計算機視覺方面的東西,現在想學習一下數據挖掘跟搜索引擎,自己基礎也有點薄弱,看朱明的那本數據挖掘,只能片面的了解這個數據挖掘。不過最近有一本書 機器學習實戰,于是乎通過實戰的形式了解一下基本的算法…

mysql服務器的線程數查看方法_MySQL服務器線程數的查看方法詳解

本文實例講述了MySQL服務器線程數的查看方法。,具體如下:mysql重啟命令:/etc/init.d/mysql restartMySQL服務器的線程數需要在一個合理的范圍之內,這樣才能保證MySQL服務器健康平穩地運行。Threads_created表示創建過的線程數&…

[No000003]現代版三十六計,計計教你如何做人

《現代版三十六計,計計教你如何做人》 …………………………………………………………………………………… 第1計施恩計 在人際交往中,見到給人幫忙的機會,要立馬撲上去,像一只饑餓的松鼠撲向地球上的最后一粒松籽. 因為人情就是財富,人際關系一個最基本的目的就是結人情,有人…

mysql 重置root密碼 遠程訪問_重置mysql的root密碼以及設置mysql遠程登陸權限

root密碼忘記,重置mysql的root密碼:t一、修改mysql的配置文件my.cnf1.在[mysqld]的段中加上一句:skip-grant-tables[mysqld]datadir/var/lib/mysqlsocket/var/lib/mysql/mysql.sockskip-name-resolveskip-grant-tables保存并且退出vi。(或執行…

C#中枚舉類型和int類型的轉化

先定義一個枚舉類型 public enum PropertyType { 小學 0, 初中, 高中&#xff0c;大學 }; int ->enum int d2; PropertyType a(PropertyType)d; int <- enum PropertyType d PropertyType.小學; int a Convert.ToInt32(d); Enum類有關的方法 E…

vagrant使用centos的環境安裝..

vagrant這貨挺好用的..簡要就是, 下好virtualbox, vagrant, 然后下個你需要的box. 然后vagrant box add boxname boxpath就行. 然后在合適的地方vagrant init就能創建好虛擬機, 然后vagrant up是開啟, vagrant ssh是通過ssh連接過去, 可以裝一個zsh , 配置oh my zsh啥的, 然后安…

linux mysql odbc驅動安裝_MySQL ODBC 驅動安裝

閱讀目錄一、在線安裝1、yum在線安裝驅動2、配置驅動3、測試連接二、編譯安裝1、MySQL創建測試用戶和測試庫2、安裝驅動3、配置驅動4、測試一、在線安裝1、yum在線安裝驅動# yum -y installunixODBC#yum -y install mysql-connector-odbc2、配置驅動(1)查看驅動程序相關信息# c…

通過 HTTPS 和 SSL 確保 Windows Azure 網站 (WAWS) 安全

編輯人員注釋&#xff1a;本文章由 Windows Azure 網站團隊的項目經理 Erez Benari 撰寫。 隨著身份盜竊和各種形式的網絡犯罪迅速增多&#xff0c;使用安全套接字層 (SSL) 對網站進行保護變得越來越重要和普遍。如果將網站托管在 Windows Azure 網站 (WAWS) 上&#xff0c;您可…

mysql之多表查詢

今天在項目中遇到一個數據庫查詢的問題&#xff1a;三張表分別放置不同的東西&#xff1a;分享的音頻相關數據、分享的文字圖片說說、分享的主題相關數據。所有分享的東西都可看做新鮮事&#xff0c;現在要求從這三張表將相同的幾個字段的數據全部查找出來按照發布時間先后排序…

設立SharePoint2010列表的項目級權限

設置SharePoint2010列表的項目級權限 在SharePoint2010中我們經常會用到這樣的權限設置&#xff0c;在一個列表中可以存儲多個人輸入的數據&#xff0c;但每個人只能看到自己的那部分數據。也就是多個人共同維護一個列表&#xff0c;但各自只能查看、編輯、刪除自己錄入的那部分…

MySQL優化filler值_MySQL 性能優化神器 Explain 使用分析

簡介MySQL 提供了一個 EXPLAIN 命令, 它可以對 SELECT 語句進行分析, 并輸出 SELECT 執行的詳細信息, 以供開發人員針對性優化.EXPLAIN 命令用法十分簡單, 在 SELECT 語句前加上 Explain 就可以了, 例如:EXPLAIN SELECT * from user_info WHERE id < 300;準備為了接下來方便…

Codeforces Round #224 (Div. 2)

題目&#xff1a;http://codeforces.com/contest/382 A Ksenia and Pan Scales 一個求天平是否能夠平衡的題目。。。水題,注意一下結果的輸出就行。 1 #include <iostream>2 #include <cstdio>3 #include <cstring>4 #include <cstdlib>5 #include <…

二叉樹第i層中的所有結點_講透學爛二叉樹(二):圖中樹的定義amp;各類型樹的特征分析...

日常中我們見到的二叉樹應用有&#xff0c;Java集合中的TreeSet和TreeMap&#xff0c;C STL中的set、map&#xff0c;以及Linux虛擬內存的管理&#xff0c;以及B-Tree&#xff0c;B-Tree在文件系統&#xff0c;都是通過紅黑樹去實現的。雖然之前寫過《再談堆排序&#xff1a;堆…

node-webkit 開發環境搭建

node-webkit支持的操作系統類型&#xff1a; Linunx:32bit / 64bitWindows: win32Mac:32bit,10.7 開發環境 1&#xff0c;根據自己的操作系統下載響應的nw二進制文件&#xff0c;下載地址&#xff1a;https://github.com/rogerwang/node-webkit 2,建立基本開發目錄&#xff0c;…

mysql sqlsugar_.net core +mysqlSugar(最為簡單的增刪改查)

首先建立.net Core API - empty 這個就不說了然后創建新的Controller記得添加路由[Route("api/Users")]然后在Nuget Packages安裝 所需安裝包這里是用mysql所以下載如下的mysqlSugarCore(切記不要忘記安裝Mysql.Data)創建實例化class文件DbText.cs用于連接數據庫&…

關于eclipse的indigo版中文注釋時字體太小的問題(轉)

eclipse目前最新版代號indigo, 在win7上使用時中文注釋時字體太小的問題. 為什么會這樣? 首先我們應該知道, 在win7系統中, font是有"顯示"和"隱藏" 狀態的. 默認情況下, eclipse使用的默認字體courier new是處于 "隱藏"下的. 這樣當eclipse打開…

webdriver(python)學習筆記七——多層框架定位與智能等待

多層框架或窗口定位&#xff1a; switch_to_frame()switch_to_window()智能等待&#xff1a; implicitly_wait()現在web應用中經常會遇到框架如&#xff08;frame&#xff09;或窗口&#xff08;windows&#xff09;的應用&#xff0c;這樣定位就比較難&#xff0c;有時定位一個…

bbp代碼python_如何正確計算加密債券價格的BBP(Bollinger波段百分比)?

我試圖用這個代碼計算python中的BBP(Bollinger頻帶百分比)。然而&#xff0c;我的^{cd1>}函數返回^{{cd2>}或^{cd3>}用于^{cd4>}。當我使用一些硬幣收盤價時&#xff0c;令人困惑的是&#xff0c;這個函數返回正確的^{cd4>}數字(而不是inf)。這是我的python代碼…

ASP.NET學習路線圖

轉自&#xff1a;http://www.cnblogs.com/huangmeimujin/archive/2011/08/08/2131242.html 如果你已經有較多的面向對象開發經驗&#xff0c;跳過以下這兩步&#xff1a; 第一步 掌握一門.NET面向對象語言&#xff0c;C#或VB.NET 我強烈反對在沒系統學過一門面向對象(OO)語言的…

centos 多個mysql數據庫_CentOS6.5 一臺服務器同時安裝多個Mysql數據庫

建用戶與組groupadd mysqluseradd -g mysql mysql下載源碼&#xff1a;wget https://downloads.mariadb.org/interstitial/mariadb-10.1.10/source/mariadb-10.1.10.tar.gztar -xvf mariadb-10.1.10.tar.gz1、編譯&#xff1a;cmake . -DCMAKE_INSTALL_PREFIX/var/lib/mysql33…