欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

解析Swift語言面相對象編程中的繼承特性

 更新時間:2015年11月05日 15:09:06   投稿:goldensun  
這篇文章主要介紹了解析Swift語言面相對象編程中的繼承特性,是Swift入門學(xué)習(xí)中的基礎(chǔ)知識,需要的朋友可以參考下

取大于形態(tài)的能力被定義為繼承。一般一個類可以從另一個類繼承屬性和方法。類可以進(jìn)一步劃分到子類和超類。

子類:當(dāng)一個類從另一個類繼承屬性,方法和功能被稱為子類

超類:類包含屬性,方法和功能被其它類繼承稱為超類

Swift 中類包含父類和調(diào)用訪問方法,屬性,功能和重寫方法。另外,屬性觀察者也用于添加屬性和修改所存儲的或計(jì)算的特性的方法。

基類
一個類如果不從其它類繼承方法,屬性或功能,那么它被稱為“基類”。

復(fù)制代碼 代碼如下:

classStudDetails{var stname:String!var mark1:Int!var mark2:Int!var mark3:Int!
    init(stname:String, mark1:Int, mark2:Int, mark3:Int){self.stname = stname
        self.mark1 = mark1
        self.mark2 = mark2
        self.mark3 = mark3
    }}let stname ="swift"let mark1 =98let mark2 =89let mark3 =76

println(stname)
println(mark1)
println(mark2)
println(mark3)


當(dāng)我們使用 playground 運(yùn)行上面的程序,得到以下結(jié)果。

swift
98
89
76

這里 StudDetails 類被定義為基類,它用于包含學(xué)生名字和三個科目標(biāo)記為:mark1, mark2 和 mark3. 'let'關(guān)鍵字在 playground 中初始化并使用 “println” 函數(shù)打印顯示基礎(chǔ)類的值。

子類
在現(xiàn)有的基類上定義一個新的類就叫作“子類”。子類繼承了其基類的屬性,方法和功能。要定義一個子類使用 “ : ” 在基類名稱前。

復(fù)制代碼 代碼如下:

classStudDetails{var mark1:Int;var mark2:Int;
   
    init(stm1:Int, results stm2:Int){
        mark1 = stm1;
        mark2 = stm2;}
   
    func print(){
        println("Mark1:\(mark1), Mark2:\(mark2)")}}class display :StudDetails{
    init(){super.init(stm1:93, results:89)}}let marksobtained = display()
marksobtained.print()


當(dāng)我們使用 playground 運(yùn)行上面的程序,得到以下結(jié)果。

Mark1:93, Mark2:89

“StudDetails” 類定義為學(xué)生標(biāo)記聲明的超類以及子類的 'display' 從它的超類繼承以打的標(biāo)記。子類定義學(xué)生標(biāo)記和調(diào)用打印方法來顯示學(xué)生的標(biāo)志。

覆蓋/重寫
訪問超類的實(shí)例,類型方法,例如,類型屬性和下標(biāo)子類提供覆蓋的概念。 'override' 關(guān)鍵字用來覆蓋超類中聲明的方法。

訪問超級類的方法,屬性和下標(biāo)
“super”關(guān)鍵字作為前綴用來訪問超類中聲明的方法,屬性和下標(biāo)。

2015115151431204.png (244×140)
方法和屬性覆蓋 方法覆蓋
繼承實(shí)例和類型的方法可以通過 'override' 關(guān)鍵字覆蓋在子類中定義的方法。在這里,在子類中重寫打印來訪問超類打印type屬性。

復(fù)制代碼 代碼如下:

class cricket {
    func print(){
        println("Welcome to Swift Super Class")}}class tennis: cricket  {override func print(){
        println("Welcome to Swift Sub Class")}}let cricinstance = cricket()
cricinstance.print()let tennisinstance = tennis()
tennisinstance.print()


當(dāng)我們使用 playground 運(yùn)行上面的程序,得到以下結(jié)果。

Welcome to Swift Super Class
Welcome to Swift Sub Class

屬性重寫
可以覆蓋繼承的實(shí)例或類屬性來提供自定義的getter和setter 屬性,或添加屬性觀察者,當(dāng)下層屬性值更改時以使重寫屬性到觀察者。

重寫屬性getter和setter
Swift 允許用戶提供自定義 getter和setter 覆蓋繼承的屬性,無論是存儲還是計(jì)算屬性。子類不知道繼承的屬性名稱和類型。因此,至關(guān)重要的是,用戶需要在子類中指定,名稱和在超類中指定重寫屬性的類型。

這可以通過兩種方式來完成:

當(dāng) setter 被定義為重寫屬性,用戶必須也要定義 getter。

當(dāng)我們不希望修改繼承屬性的getter,我們可以通過簡單的語法“super.someProperty”來給超類繼承值。

復(fù)制代碼 代碼如下:

classCircle{var radius =12.5var area:String{return"of rectangle for \(radius) "}}classRectangle:Circle{varprint=7overridevar area:String{returnsuper.area +" is now overridden as \(print)"}}let rect =Rectangle()
rect.radius =25.0
rect.print=3
println("Radius \(rect.area)")


當(dāng)我們使用 playground 運(yùn)行上面的程序,得到以下結(jié)果。

Radius of rectangle for 25.0 is now overridden as 3

重寫屬性觀察者
當(dāng)一個新的屬性需要為繼承的屬性被添加,在 Swift 中推出 “屬性重寫” 的概念。通知用戶當(dāng)繼承屬性值被更改。但重寫不適用于繼承的常量存儲屬性和繼承只讀計(jì)算屬性。

復(fù)制代碼 代碼如下:

classCircle{var radius =12.5var area:String{return"of rectangle for \(radius) "}}classRectangle:Circle{varprint=7overridevar area:String{returnsuper.area +" is now overridden as \(print)"}}let rect =Rectangle()
rect.radius =25.0
rect.print=3
println("Radius \(rect.area)")classSquare:Rectangle{overridevar radius:Double{
        didSet {print=Int(radius/5.0)+1}}}let sq =Square()
sq.radius =100.0
println("Radius \(sq.area)")


當(dāng)我們使用 playground 運(yùn)行上面的程序,得到以下結(jié)果。

Radius of rectangle for 25.0 is now overridden as 3
Radius of rectangle for 100.0 is now overridden as 21

最終屬性以防止重寫
當(dāng)用戶不需要讓別人訪問超類的方法,屬性或下標(biāo),Swift 引入“final”屬性,以防止覆蓋。 當(dāng) “final” 屬性被聲明后,將不允許超類的方法,屬性和下標(biāo)被覆蓋。在超類不可以有 'final' 。當(dāng) “final” 屬性被聲明后,用戶限制子類創(chuàng)建。

復(fù)制代碼 代碼如下:

 finalclassCircle{finalvar radius =12.5var area:String{return"of rectangle for \(radius) "}}classRectangle:Circle{varprint=7overridevar area:String{returnsuper.area +" is now overridden as \(print)"}}let rect =Rectangle()
rect.radius =25.0
rect.print=3
println("Radius \(rect.area)")classSquare:Rectangle{overridevar radius:Double{
        didSet {print=Int(radius/5.0)+1}}}let sq =Square()
sq.radius =100.0
println("Radius \(sq.area)")


當(dāng)我們使用 playground 運(yùn)行上面的程序,得到以下結(jié)果。

復(fù)制代碼 代碼如下:

<stdin>:14:18: error: var overrides a 'final' var
    override var area: String {
                 ^
<stdin>:7:9: note: overridden declaration is here
    var area: String {
        ^
<stdin>:12:11: error: inheritance from a final class 'Circle'
    class Rectangle: Circle {
          ^
<stdin>:25:14: error: var overrides a 'final' var
override var radius: Double {
             ^
<stdin>:6:14: note: overridden declaration is here
   final var radius = 12.5


當(dāng)超類聲明為 “final”和數(shù)據(jù)類型也被宣明為'final',程序?qū)⒉辉试S再創(chuàng)建子類,否則它會引發(fā)錯誤。

相關(guān)文章

  • Swift條件判斷中逗號的使用方法示例

    Swift條件判斷中逗號的使用方法示例

    判斷語句是我們?nèi)粘i_發(fā)經(jīng)常會遇到的一個功能,下面這篇文章主要給大家介紹了關(guān)于Swift條件判斷中逗號的使用方法,文中給出了詳細(xì)的示例代碼供大家參考學(xué)習(xí),需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。
    2017-10-10
  • SwiftUI中TabView組件的常規(guī)使用

    SwiftUI中TabView組件的常規(guī)使用

    這篇文章主要給大家介紹了關(guān)于SwiftUI中TabView組件的常規(guī)使用,文中通過實(shí)例代碼介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用SwiftUI具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2022-06-06
  • 詳解Swift編程中下標(biāo)的用法

    詳解Swift編程中下標(biāo)的用法

    這篇文章主要介紹了Swift編程中下標(biāo)的用法,是Swift入門學(xué)習(xí)中的基礎(chǔ)知識,需要的朋友可以參考下
    2015-11-11
  • Swift自動調(diào)整視圖布局AutoLayout和AutoresizingMask功能詳解

    Swift自動調(diào)整視圖布局AutoLayout和AutoresizingMask功能詳解

    這篇文章主要為大家介紹了Swift自動調(diào)整視圖布局AutoLayout和AutoresizingMask功能及使用示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-06-06
  • Swift UILable 設(shè)置內(nèi)邊距實(shí)例代碼

    Swift UILable 設(shè)置內(nèi)邊距實(shí)例代碼

    本文主要介紹Swift UILable 設(shè)置內(nèi)邊距,這里提供示例代碼供大家參考,有需要的小伙伴可以看下
    2016-07-07
  • Swift實(shí)現(xiàn)堆排序算法的代碼示例

    Swift實(shí)現(xiàn)堆排序算法的代碼示例

    堆排序(HeapSort)是一樹形選擇排序,堆排序的時間復(fù)雜度O(nlogn),這里我們來看一下Swift實(shí)現(xiàn)基堆排序算法的代碼示例,首先對堆排序算法的基本概念作一個了解:
    2016-06-06
  • Swift使用WKWebView在iOS應(yīng)用中調(diào)用Web的方法詳解

    Swift使用WKWebView在iOS應(yīng)用中調(diào)用Web的方法詳解

    這篇文章主要介紹了Swift使用WKWebView在iOS應(yīng)用中調(diào)用Web的方法詳解,使用WKWebView便等于使用和Safari中相同的JavaScript解釋器,用來替代過去的UIWebView,需要的朋友可以參考下
    2016-04-04
  • Ubuntu 16.04上安裝 Swift 3.0及問題解答

    Ubuntu 16.04上安裝 Swift 3.0及問題解答

    本文給大家分享的是在Ubuntu系統(tǒng)中安裝 Swift 3.0的方法和步驟,以及安裝過程中有可能遇到的問題的解答,這里推薦給小伙伴們,希望大家能夠喜歡
    2016-07-07
  • iOS中Swift指觸即開集成Touch ID指紋識別功能的方法

    iOS中Swift指觸即開集成Touch ID指紋識別功能的方法

    隨著移動支付時代的到來,Touch ID 指紋驗(yàn)證迅速被支付寶,微信錢包普及,相信各位朋友使用后也大呼方便。下面給大家分享iOS中Swift指觸即開集成Touch ID指紋識別功能的方法,一起看看吧
    2017-03-03
  • swift實(shí)現(xiàn)自定義圓環(huán)進(jìn)度提示效果

    swift實(shí)現(xiàn)自定義圓環(huán)進(jìn)度提示效果

    這篇文章主要為大家詳細(xì)介紹了swift實(shí)現(xiàn)自定義圓環(huán)進(jìn)度提示效果,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-05-05

最新評論