java 多態和內部類

接口跟接口之間存在繼承關係java

一個接口能夠繼承多個接口this

一個非抽象類:必須實現接口中的全部方法對象

一個抽象類實現接口  能夠不實現接口中的方法  可是繼承與抽象類的類必需要是實現接口中的方法繼承

多態:一個對象的多種表現形態(父類的引用類型變量指向了字類的對象)接口

多態的知足條件  必須有繼承關係 必須重寫父類的方法編譯器

多態的使用注意點:虛擬機

  1. 多態狀況下:子父類同名的成員變量 ,默認訪問父類中的成員(無論是普通仍是靜態成員變量)變量
  2. 多態狀況下:子父類存在同名的非靜態方法 ,訪問的是子類的非靜態方法
  3. 多態狀況下:子父類存在同名的靜態方法 ,訪問的是父類的靜態方法
  4. 在多態狀況下 不能訪問子類特有的成員變量和方法

總結:多態狀況下  子父類存在同名的成員(成員指的是成員變量和方法(方法包括靜態方法和普通方法)),訪問的都是父類  除了同名的非靜態方法是訪問子類編譯

Java編譯器原理:class

編譯看左邊   執行不必定看右邊變量

編譯看左邊:java編譯器在編譯的時候會檢測引用類型中是否含有指定的成員,若是沒有就會報錯

 

 

 

多態的使用場景:

1.多態能夠用於作形式參數,可讓方法接受更多的類型

2.多態用於返回值類型   能夠返回更多的數據類型

 

 

多態的另外一種表現形式:

接口的引用類型指向實現類

實現關係下的多態:

接口 變量 =new 接口實現類();

 

內部類:一個類中定義另一個類 ,這樣的類叫內部類

內部 的文件名: 外部類名$內部類名

內部類分兩種

  1. 成員內部類

如何訪問成員內部類:

方式1:在外部類中定義一個方法建立內部類對象,再在經過對象進行訪問

方式2:直接在其餘類中建立內部類對象,直接經過對象訪問

    格式:

      外部類 . 內部類  變量名 = new 外部類(). New 內部類();

內部類的使用注意點:

  1. 若是外部類和內部類中有同名成員變量,在內部類中java虛擬機默認訪問內部類中的成員變量 ,能夠經過「外部類 . this . 變量名」
  2. 若是內部類中的成員被private(私有)修飾,這個時候只能用方式1來訪問內部類
  3. 內部類中有成員變量被static修飾 那麼這個類也必須是一個靜態的

內部類使用的好處‘

內部類中是能夠直接訪問外部類的全部成員

通常在什麼狀況下使用內部類:

咱們在描述一個A對象,發現A對象中又須要有一個對象B很複雜,B對象又要訪問A中的數據,這個時候用外部類來描述B對象更方便

 

 

局部內部類:

在類的方法中定義的類,這樣的類叫局部內部類

局部內部類只能經過第一種方式訪問(在內部類所在的方法裏直接建立內部類對象  ,用這個對象訪問內部類的方法)

局部內部類的使用注意:

  1. 若是局部內部類訪問方法中的局部變量,方法中的局部變量必須用final修飾

 

匿名內部類:沒有類名的內部類

匿名內部類的好處:簡化書寫

使用匿名內部類使用前提:

  1. 類必須有繼承或者實現關係

 

 

匿名類的是使用

class Outer

{

    //不用匿名

    public void print(){

   //匿名的Dog

//匿名內部類 : 只是沒有名字 ,其餘的個普通類沒有區別。

  Animal a = new Animal()這個實際上是一個類的匿名內部類,具體是什麼類就不知道了

   Animal a = new Animal(){  // 匿名內部類(子類)

   //具體實現

      public  void run() { 

        System.out.println("狗在跑");

          }

          public  void sleep(){

                 System.out.println("狗在睡覺");

          }

       };

 

       a.run();

       a.sleep();

    }

}

相關文章
相關標籤/搜索