激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

服務(wù)器之家:專注于服務(wù)器技術(shù)及軟件下載分享
分類導(dǎo)航

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

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

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

2020-12-23 15:35Swift教程網(wǎng) Swift

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

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

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

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

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

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

 

復(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é)果。

 

?
1
2
3
4
swift
98
89
76

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

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

 

復(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é)果。

 

?
1
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)。

解析Swift語言面相對象編程中的繼承特性
方法和屬性覆蓋 方法覆蓋
繼承實(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é)果。

 

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

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

重寫屬性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é)果。

 

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

重寫屬性觀察者
當(dāng)一個(gè)新的屬性需要為繼承的屬性被添加,在 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é)果。

 

?
1
2
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ā)錯誤。

延伸 · 閱讀

精彩推薦
  • SwiftSwift的74個(gè)常用內(nèi)置函數(shù)介紹

    Swift的74個(gè)常用內(nèi)置函數(shù)介紹

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

    Swift教程網(wǎng)5802020-12-19
  • Swiftmac git xcrun error active developer path 錯誤

    mac git xcrun error active developer path 錯誤

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

    Swift教程網(wǎng)2232020-12-16
  • SwiftSwift實(shí)現(xiàn)多個(gè)TableView側(cè)滑與切換效果

    Swift實(shí)現(xiàn)多個(gè)TableView側(cè)滑與切換效果

    這篇文章主要為大家詳細(xì)介紹了Swift實(shí)現(xiàn)多個(gè)TableView側(cè)滑與切換效果,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下...

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

    swift where與匹配模式的實(shí)例詳解

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

    追到夢的魔術(shù)師14382021-01-06
  • SwiftSwift教程之基礎(chǔ)數(shù)據(jù)類型詳解

    Swift教程之基礎(chǔ)數(shù)據(jù)類型詳解

    這篇文章主要介紹了Swift教程之基礎(chǔ)數(shù)據(jù)類型詳解,本文詳細(xì)講解了Swift中的基本數(shù)據(jù)類型和基本語法,例如常量和變量、注釋、分號、整數(shù)、數(shù)值類型轉(zhuǎn)換等...

    Swift教程網(wǎng)5162020-12-18
  • SwiftSwift中轉(zhuǎn)義閉包示例詳解

    Swift中轉(zhuǎn)義閉包示例詳解

    在Swift 中的閉包類似于結(jié)構(gòu)塊,并可以在任何地方調(diào)用,下面這篇文章主要給大家介紹了關(guān)于Swift中轉(zhuǎn)義閉包的相關(guān)資料,需要的朋友可以參考下...

    小小小_小朋友11412021-12-26
  • SwiftSwift使用CollectionView實(shí)現(xiàn)廣告欄滑動效果

    Swift使用CollectionView實(shí)現(xiàn)廣告欄滑動效果

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

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

    Swift能代替Objective-C嗎?

    這是我在網(wǎng)上上看到的答案,復(fù)制粘貼過來和大家分享一下,因?yàn)槲液秃芏嗳艘粯雍荜P(guān)心Swift的出現(xiàn)對Mac開發(fā)的影響和對Objective-C的影響。...

    Swift教程網(wǎng)4412020-12-16
主站蜘蛛池模板: 国产一区二区三区在线免费观看 | 91精品中文字幕 | 日韩黄色免费电影 | 国产91对白叫床清晰播放 | 成人激情在线观看 | 一级爱爱 | 久久国产精品一区 | 美国黄色毛片女人性生活片 | 孕妇体内谢精满日本电影 | 一级免费在线视频 | 欧美一级爱爱 | 在线看小早川怜子av | 久草手机在线 | 欧美男女爱爱视频 | 欧美一级黄色片免费观看 | 亚洲国产精品久久久久婷婷老年 | 日韩精品一二三 | 最近中文字幕一区二区 | 国产午夜精品一区 | 欧美成人免费一区二区三区 | 成人三级免费电影 | 一区二区免费网站 | 激情毛片 | 偿还电影免费看 | 美女在线观看视频一区二区 | 黄色网www| 国产精品成人一区二区三区电影毛片 | 欧美日韩亚洲成人 | 久久艳片 | 国产精品自拍片 | 精品国产一区二区三区在线 | 亚洲一区二区三区在线播放 | 欧美人xx | 成人在线视频网 | 国产精品久久久久久久久久尿 | 黄色毛片一级视频 | 一区二区三区欧美在线观看 | 香蕉国产精品 | 国产久草视频在线 | 超久久 | 日本不卡中文字幕 |