天天看點

黑馬程式員---2015.6.15java基礎筆記---extends---final---interface

------Java教育訓練、Android教育訓練、iOS教育訓練、.Net教育訓練、期待與您交流! -------

1.java面向對象的特性---繼承性

    a.提高了代碼的複用性

    b.讓類與類之間産生了關系,有了這個關系,才有多态的特性

    注意:千萬不要為了擷取其他類的功能,簡化代碼而繼承。

                必須是類與類之間有所屬關系才可以繼承 。

2.Java語言:java隻支援單繼承,不支援多繼承

                        因為多繼承容易帶來安全隐患:當多個父類中定義了相同的功能,但功能内容不同時,子類對象不能确定要運作哪一個。

                        java支援多層繼承,也就是一個繼承體系。

                        簡單一句話:查閱父類功能,建立子類對象使用功能。

3.super關鍵字:當子類繼承父類後,子類對象要使用父類變量時,使用super關鍵字。

4.子父類中的函數

        當子類出現和父類一樣的函數時。

        當子類對象調用該函數時,會運作子類函數的内容

        如同父類的函數被覆寫一樣。

        這種情況是函數的另一個特性:重寫(覆寫);

        當子類繼承父類,沿襲了父類的功能,但是子類雖具備該功能,但是功能的内容卻和父類不一緻。

        這時,沒必要定義新的功能,而是使用覆寫,保留父類的功能并重寫功能内容

    覆寫:

        1.子類覆寫父類,必須保證子類權限大于等于父類權限,才可以覆寫,否者編譯失敗。

        2.靜态隻能覆寫靜态。

    記住:

        重載:隻看同名函數的參數清單

        重寫:子父類方法要一模一樣,包括傳回值類型        

5.預設權限protected        

6.子父類中的構造函數:

        a.在對子類對象進行初始化時,父類的構造函數也會運作

            那是因為子類的構造函數預設第一行有一條隐身的語句 super()

            super();會通路到父類中空參數的構造函數,而且子類中的所有構造函數預設第一行都是super();

        b.為什麼子類一定要通路父類中的構造函數呢?

                因為父類中的資料,子類可以直接擷取,是以子類對象在建立時,需要先檢視父類是如何對這些資料進行初始化的。

                是以子類在對象初始化時,要先通路一下父類中的構造函數

                如果要通路父類中指定的構造函數,可以通過手動定義super語句的方式來指定。

        注意:super語句一定定義在子類構造函數的第一行

        結論(子類的執行個體化過程):

            子類的所有的構造函數,預設都會通路父類中空參數的構造函數。

            因為子類每一個構造函數的第一行都有一句隐式super();

            當父類中沒有空參數的構造函數時,子類必須通過手動super語句來指定要通路父類中的構造函數。

            為什麼super要寫在第一行,因為初始化動作要先執行!

7.final:最終,作為一個修飾符

                a.可以修飾類,函數,變量

                b.被final修飾的類不可以被繼承    ,為了避免被繼承,被子類複寫功能。

                c.被final修飾的方法不能被複寫

                    當在描述事物時,一些資料的出現值是固定的,那麼這時為了增強閱讀性,都給這些值起個名字,友善閱讀。

                    而這個值不需要改變,是以加上final修飾

                    作為常量:常量的書寫規範,所有字母都大寫,如果由多個單詞組成,單詞間通過_連接配接。

                    static final double PI = 3.14;

                d.内部類定義在類中的局部變量,隻能通路該局部被final修飾的局部變量

8.抽象類:當不同的類中有同樣的方法。但是方法内容不同。這時就需要向上抽取。這時,隻抽取功能定義,而不抽取功能主體。

    抽象類的特點: a.抽象方法一定在抽象類中

                                 b.抽象方法和抽象類必須由abstract關鍵字修飾

                                 c.抽象類不可以用new建立對象,因為調用抽象方法沒有意義。

                                 d.抽象類中的方法要被使用,必須由子類複寫其所有的抽象方法後,建立子類對象調用。

                                         如果子類隻覆寫了部分抽象方法,那麼該子類還是一個抽象類。

    抽象類和一般類沒有太的不同。

    該如何描述事務就如何描述事物,隻不過該事物中出現了一些看不懂的東西。

    這些不确定的部分,也是該事物的功能,需要明确出現。但是無法定義主體。        

    通過抽象方法來表示。

    抽象類比一般類多了抽象函數,就是在類中可以定義抽象方法。

    抽象類不可以執行個體化。

    特殊:抽象類中可以不定義抽象方法,這樣做僅僅是不讓該類建立對象。

abstract class Student
    {
        abstract void study();
    }
    
    class BaseStudent extends Student
    {
        void study()
        {
            System.out.println("base study");    
        }    
    }

    class AdvStudent extends Student
    {
        void study()
        {
            System.out.println("adv study");    
        }    
    }
    
    class AbstractDemo
    {
        public static void main(String[] args)
        {
                
        }    
    }
           

9.

//擷取時間的模闆類
    abstract class ToolGetTime
    {
        //此方法不需要被重寫,是以定義為final
        public  final void getTime()
        {
            long start = System.currentTimeMillis();
            runcode();
            long end = System.currentTimeMillis();
            System.out.println("運作時間"+(end-start)+"毫秒");
        }
        
        //因為此類中該方法,不需要定義内容,是以定義成abstract
        public abstract void runcode();
    
    }
    
    class subGetTime extends ToolGetTime
    {
            public void runcode()
            {
                for(int x= 0;x<500;x++) {
                    System.out.print(x);
                }    
            }
    }
    
    class TemplateDemo
    {
        public static void main(String[] args)
        {
                subGetTime st = new subGetTime();
                st.getTime();
        }    
    }
           

10.抽象類中既可以定義抽象方法,也可以定義非抽象方法。        

11.接口 interface:    

                格式特點:

                    a.接口中常見定義:常量,抽象方法

                    b.接口中的成員都有固定修飾符

                        常量:public static final

                        方法:public abstract

                記住:接口中的成員都是public的

                接口:是不可以建立對象的,因為有抽象方法

                需要被子類實作,子類對接口中的抽象方法全部覆寫以後,子類才可以執行個體化。否則子類是個抽象類。              

            接口可以被類多實作。

interface A
                {
                    public static final int a = 3;
                    public abstract void show();    
                }
                
                class B implements A
                {
                    public void show() {
                        System.out.println("b 實作了 a 接口");
                    }    
                }
                
                class InterfaceDemo
                {
                    public static void main(String[] args)
                    {
                        B b = new B();
                        b.show();    
                    }    
                }
           

12.一個類既繼承氣他類,也實作了氣他接口那麼書寫格式

        class Cat extends Animal implements BuRuDongWu

13.接口的特點:

        a.接口是對外暴露的規則

        b.接口是程式的功能擴充

        c.接口可以用來多實作

        d.類與接口之間是實作關系,而且類可以繼承一個類的同時實作多個接口。

        e.接口與接口之間可以有繼承聯系,還可以多繼承   

繼續閱讀