<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                合規國際互聯網加速 OSASE為企業客戶提供高速穩定SD-WAN國際加速解決方案。 廣告
                ## 抽象類定義 [TOC] 我們之前說“人會尿尿,男人是站著尿尿,女人是蹲著尿尿”,在基類人(Person)中定義了尿尿的方法(niaoniao),但其實基類人(Person)不知道怎么定義尿尿的行為,站著也不行,蹲著也不是,應該交給子類男人(Man)、子類女人(Woman)具體去定義尿尿行為。 **在程序世界里面,基類中某個方法,基類不知道具體實現,需要交給子類去具體實現,我們可以把這個方法定義為抽象方法**。那怎么把方法變成抽象方法呢?**去掉方法體,方法上加上abstract關鍵字即可**,類似這樣: ~~~ abstract fun niaoniao():String ~~~ **一個類如果包含了抽象方法,那么這個類需要變成抽象類**。那怎么把類變成抽象類呢?類的前面,加上abstract關鍵字即可,類似這樣: ~~~ abstract open class Person(val name: String) { abstract fun niaoniao(): String } ~~~ ## 抽象類實現 ### 基本實現 我們把“人會尿尿,男人是站著尿尿,女人是蹲著尿尿”這樣的例子,通過抽象類和抽象方法實現一下,參考代碼: ![](http://upload-images.jianshu.io/upload_images/7368752-60e6c16c15d38424.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240) 針對以上代碼只是把niaoniao方法改成了抽象方法,Person類改成了抽象類,其他沒有改變。 * [ ] **總結** 在定義抽象類時需要注意,包含抽象方法的類必須聲明為抽象類,但抽象類可以不包含任何抽象方法,只需使用abstract關鍵字來修飾即可。另外,抽象類是不可以被實例化的,因為抽象類中有可能包含抽象方法,抽象方法是沒有方法體的,不可以被調用。如果想調用抽象類中定義的方法,則需要創建一個子類,在子類中將抽象類中的抽象方法進行實現。 示例 ``` abstract class Animal(){ abstract fun eat() } class Monkey(food: String):Animal(){ var food = food; override fun eat() { println("猴子正在吃$food。") } } fun main(args: Array<String>) { var monkey = Monkey("香蕉") monkey.eat() } ``` 運行結果 ``` 猴子正在吃香蕉。 ``` 從運行結果可以看出,子類實現了父類的抽象方法后,可以正常進行實例化,并通過實例化對象調用實現的方法。 ### **可包含方法實現** 但是**抽象類,可包含方法實現(就是說抽象類可包含非抽象方法)**,類似這樣也是可以的: ![](http://upload-images.jianshu.io/upload_images/7368752-1c1e7d687819d924.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240) 我們對上面代碼做相應修改,參考代碼: ![](http://upload-images.jianshu.io/upload_images/7368752-615659aeb91a8f22.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240) ### **不能被實例化** **抽象類不能被實例化,只能作為基類,被其他類所繼承**。我們通過代碼驗證下,參考代碼: ![](http://upload-images.jianshu.io/upload_images/7368752-63f07b779f4ca683.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240) ### **子類必須實現抽象方法或者變成抽象類** 一個類繼承了抽象類,要么實現所有的抽象方法,要么再把自身變成抽象類。**抽象類可以包含非抽象方法**。參考代碼: ![](http://upload-images.jianshu.io/upload_images/7368752-43081172f7d80103.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240) 我們看到Man沒有實現niaoniao的方法,就需要通過**abstract**關鍵字繼續把類變成抽象類。 ### **抽象方法必須public或者protected(默認就是)** 抽象方法必須為public或者protected(因為如果為private,則不能被子類繼承,子類便無法實現該方法),缺省情況下默認為public。參考截圖: ![](http://upload-images.jianshu.io/upload_images/7368752-3bd808d94146ffae.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240) ### **可包含屬性** **抽象類,還可以包含抽象屬性**,也就是通過**abstract**關鍵字修飾的屬性,**如果抽象類中含有抽象屬性,子類中必須將抽象屬性初始化,除非子類也為抽象類**。參考代碼: ![](http://upload-images.jianshu.io/upload_images/7368752-138a07ad91c55bab.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240) ### **屬性不可實例化(初始化)** 雖然,**抽象類可以包含屬性,但是只能包含屬性的定義,屬性不能實例化,Java中的抽象類中的屬性,可以初始化,也可以不初始化**,參考截圖: ![](http://upload-images.jianshu.io/upload_images/7368752-5f36cbd708aaa231.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看