亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > Swift > 正文

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

2020-03-09 17:52:40
字體:
來源:轉載
供稿:網友
這篇文章主要介紹了解析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 運行上面的程序,得到以下結果。

 

swift988976

這里 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 運行上面的程序,得到以下結果。

 

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 運行上面的程序,得到以下結果。

 

Welcome to Swift Super ClassWelcome 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 運行上面的程序,得到以下結果。

 

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 運行上面的程序,得到以下結果。

 

Radius of rectangle for 25.0 is now overridden as 3Radius 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',程序將不允許再創建子類,否則它會引發錯誤。


注:相關教程知識閱讀請移步到swift教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产免费观看久久黄| 川上优av一区二区线观看| 都市激情亚洲色图| 久久久精品国产网站| 精品日本高清在线播放| 久久久久久久久久久久久久久久久久av| 亚洲激情在线观看视频免费| 九九热在线精品视频| 2019中文字幕免费视频| 伊人伊成久久人综合网小说| 国产在线视频2019最新视频| 日韩av影片在线观看| 国产婷婷色综合av蜜臀av| 欧美激情亚洲视频| 中文字幕在线看视频国产欧美在线看完整| 欧美日韩国产精品一区二区不卡中文| 久久精品国产清自在天天线| 91av在线影院| 国产精品视频精品| 91精品国产乱码久久久久久蜜臀| 欧美日韩国产在线播放| 国产精品美乳一区二区免费| 亚洲男人的天堂在线播放| 78色国产精品| 一区二区国产精品视频| 欧美又大又粗又长| 欧美视频在线免费看| 欧美大尺度激情区在线播放| 国产自产女人91一区在线观看| 成人妇女淫片aaaa视频| 欧美最猛性xxxxx亚洲精品| 美女撒尿一区二区三区| 成人免费福利在线| 欧美成人sm免费视频| 亚洲欧美视频在线| 欧美日韩一二三四五区| 国产精品视频一| 日韩精品视频免费| 久久久久久久电影一区| 亚洲欧美三级伦理| 久久成人这里只有精品| 国产精品福利小视频| 国产91精品久久久久| 57pao国产精品一区| 一区二区三区在线播放欧美| 精品欧美国产一区二区三区| 中文字幕亚洲专区| 亚洲网站视频福利| 国产成人精彩在线视频九色| 91在线播放国产| 欧美成人sm免费视频| 色偷偷偷亚洲综合网另类| 日本韩国在线不卡| 成人午夜在线观看| 91亚洲精品久久久久久久久久久久| 国产成人综合精品在线| 欧美成人国产va精品日本一级| 亚洲精品成人久久久| 日韩三级成人av网| 亚洲精品国产电影| 久久久久一本一区二区青青蜜月| 欧美性少妇18aaaa视频| 国产精品96久久久久久又黄又硬| 亚洲人成77777在线观看网| 91精品国产777在线观看| 亚洲 日韩 国产第一| 国产在线精品成人一区二区三区| 欧美在线国产精品| 正在播放国产一区| 欧美极品美女电影一区| 欧美一区第一页| 69av成年福利视频| 国产精品尤物福利片在线观看| 午夜精品久久久久久99热| 精品免费在线观看| 久久久久久久久久国产精品| 久久久免费观看视频| 69av在线视频| 亚洲综合第一页| 亚洲欧美国产精品专区久久| 91天堂在线视频| 国产精品久久久久久久久影视| 亚洲男女自偷自拍图片另类| 欧美中文在线观看| 91国产精品视频在线| 日韩久久免费电影| 日韩精品视频免费在线观看| 91麻豆桃色免费看| 欧美成人午夜激情视频| 国产欧美日韩中文字幕| 日韩av片免费在线观看| 国产精品久久久久久久午夜| 国产日韩精品视频| 成人国产精品免费视频| 国产精品av网站| 欧美性xxxx在线播放| 国产福利精品在线| 国产一区红桃视频| 国产成人精品亚洲精品| 欧美亚洲一级片| 川上优av一区二区线观看| 国产精品爱久久久久久久| 91国内揄拍国内精品对白| 欧美一级bbbbb性bbbb喷潮片| 欧美视频中文在线看| 97不卡在线视频| 日韩成人中文字幕| 亚洲一级黄色片| x99av成人免费| 国产午夜精品免费一区二区三区| 亚洲v日韩v综合v精品v| 一区二区三区四区精品| 亚洲自拍偷拍色图| 久久亚洲精品成人| 久久国产一区二区三区| 日韩欧美在线播放| 久久久欧美精品| 日韩av电影在线网| 亚洲国产日韩欧美在线99| 国产成人精品久久二区二区| www.日本久久久久com.| 亚洲国产精品一区二区三区| 日韩hd视频在线观看| 成人美女免费网站视频| 亚洲xxxx做受欧美| 91国内产香蕉| 日韩精品免费在线视频| 国产亚洲激情视频在线| 亚洲最大成人在线| 国产91色在线| 欧美精品成人在线| 国产精品香蕉国产| 韩国三级电影久久久久久| 久久视频免费在线播放| 久久成人在线视频| 欧美日韩中文字幕在线| 国产69精品久久久久久| 夜夜躁日日躁狠狠久久88av| 亚洲精品videossex少妇| 欧美精品激情在线观看| 久久久久久久久久久久久久久久久久av| 大胆欧美人体视频| 欧美日韩中文在线观看| 国产精品天天狠天天看| 久久精品国产清自在天天线| 亚洲国内精品在线| 欧美黑人xxxⅹ高潮交| 欧美成人免费在线观看| 国产日产欧美精品| 最好看的2019的中文字幕视频| 亚洲精品第一国产综合精品| 亚洲日本欧美中文幕| 日韩免费在线播放| 97在线精品视频| xx视频.9999.com| 97在线精品国自产拍中文| 亚洲国产欧美自拍| 国产欧美日韩亚洲精品| 日本人成精品视频在线| 久久全球大尺度高清视频| 国产一区在线播放| 亚洲自拍另类欧美丝袜| 日韩视频―中文字幕| 国产欧美一区二区三区四区|