一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Swift - 解析Swift語言面相對象編程中的繼承特性

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

2020-12-23 15:35Swift教程網 Swift

這篇文章主要介紹了解析Swift語言面相對象編程中的繼承特性,是Swift入門學習中的基礎知識,需要的朋友可以參考下

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

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

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

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

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

 

復制代碼 代碼如下:

 

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)

 


當我們使用 playground 運行上面的程序,得到以下結果。

 

?
1
2
3
4
swift
98
89
76

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

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

 

復制代碼 代碼如下:

 

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()

 


當我們使用 playground 運行上面的程序,得到以下結果。

 

?
1
Mark1:93, Mark2:89

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

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

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

解析Swift語言面相對象編程中的繼承特性
方法和屬性覆蓋 方法覆蓋
繼承實例和類型的方法可以通過 'override' 關鍵字覆蓋在子類中定義的方法。在這里,在子類中重寫打印來訪問超類打印type屬性。

 

復制代碼 代碼如下:

 

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()

 


當我們使用 playground 運行上面的程序,得到以下結果。

 

?
1
2
Welcome to Swift Super Class
Welcome to Swift Sub Class

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

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

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

當 setter 被定義為重寫屬性,用戶必須也要定義 getter。

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

 

復制代碼 代碼如下:

 

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)")

 


當我們使用 playground 運行上面的程序,得到以下結果。

 

?
1
Radius of rectangle for 25.0 is now overridden as 3

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

 

復制代碼 代碼如下:

 

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)")

 


當我們使用 playground 運行上面的程序,得到以下結果。

 

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

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

 

復制代碼 代碼如下:

 

 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)")

 


當我們使用 playground 運行上面的程序,得到以下結果。

 

 

復制代碼 代碼如下:

 

<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

 


當超類聲明為 “final”和數據類型也被宣明為'final',程序將不允許再創建子類,否則它會引發錯誤。

延伸 · 閱讀

精彩推薦
  • SwiftSwift的74個常用內置函數介紹

    Swift的74個常用內置函數介紹

    這篇文章主要介紹了Swift的74個常用內置函數介紹,這篇文章列舉出了所有的Swift庫函數,內置函數是指無需引入任何模塊即可以直接使用的函數,需要的朋友可...

    Swift教程網5802020-12-19
  • Swiftmac git xcrun error active developer path 錯誤

    mac git xcrun error active developer path 錯誤

    本文主要是講訴了如何解決在mac下使用git;xcode4.6的環境時,出現了錯誤(mac git xcrun error active developer path)的解決辦法,希望對大家有所幫助...

    Swift教程網2232020-12-16
  • SwiftSwift實現多個TableView側滑與切換效果

    Swift實現多個TableView側滑與切換效果

    這篇文章主要為大家詳細介紹了Swift實現多個TableView側滑與切換效果,具有一定的參考價值,感興趣的小伙伴們可以參考一下...

    乞力馬扎羅的雪雪5822021-01-08
  • Swiftswift where與匹配模式的實例詳解

    swift where與匹配模式的實例詳解

    這篇文章主要介紹了swift where與匹配模式的實例詳解的相關資料,這里附有簡單的示例代碼,講的比較清楚,需要的朋友可以參考下...

    追到夢的魔術師14382021-01-06
  • SwiftSwift教程之基礎數據類型詳解

    Swift教程之基礎數據類型詳解

    這篇文章主要介紹了Swift教程之基礎數據類型詳解,本文詳細講解了Swift中的基本數據類型和基本語法,例如常量和變量、注釋、分號、整數、數值類型轉換等...

    Swift教程網5162020-12-18
  • SwiftSwift中轉義閉包示例詳解

    Swift中轉義閉包示例詳解

    在Swift 中的閉包類似于結構塊,并可以在任何地方調用,下面這篇文章主要給大家介紹了關于Swift中轉義閉包的相關資料,需要的朋友可以參考下...

    小小小_小朋友11412021-12-26
  • SwiftSwift使用CollectionView實現廣告欄滑動效果

    Swift使用CollectionView實現廣告欄滑動效果

    這篇文章主要為大家詳細介紹了Swift使用CollectionView實現廣告欄滑動效果,具有一定的參考價值,感興趣的小伙伴們可以參考一下...

    Stevin的技術博客12372021-01-13
  • SwiftSwift能代替Objective-C嗎?

    Swift能代替Objective-C嗎?

    這是我在網上上看到的答案,復制粘貼過來和大家分享一下,因為我和很多人一樣很關心Swift的出現對Mac開發的影響和對Objective-C的影響。...

    Swift教程網4412020-12-16
主站蜘蛛池模板: 超级乱淫变态伦短篇小说全集 | 成人免费一区二区三区在线观看 | 女人日男人 | 变形金刚第一部 | 国产三级精品久久三级国专区 | 午夜深情在线观看免费 | 国产免费久久精品 | 免费国产高清精品一区在线 | 操人网 | 春宵福利网站在线观看 | 无码区国产区在线播放 | 欧美日韩一区二区三区免费 | 国产精品吹潮香蕉在线观看 | 特级夫妻大片免费在线播放 | 日本剧情片在线播放中文版 | 欧美区一区 | 白丝出水 | 美国雪白人妖sarina | 毛片 ftp | 四虎网站最新网址 | 2020精品极品国产色在线观看 | 99毛片| 国产精品色片 | 香蕉国产成版人视频在线观看 | 午夜影院免费入口 | 2022色婷婷综合久久久 | 3d动漫美女物被遭强视频 | 日本指交 | 福利国产精品 | 美女和男人免费网站视频 | 果冻传媒mv在线观看入口免费 | 丝瓜茄子绿巨人秋葵榴莲污 | 亚洲系列国产系列 | 先锋影音 av | 欧美视频一二三区 | 亚洲国产精品嫩草影院久久 | 手机看片福利盒子久久 | 色综合久久中文字幕网 | 色综合综合色 | 成人精品一区二区三区 | 日本一区二区不卡久久入口 |