最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

JAVA 內(nèi)部類詳解及實例

 更新時間:2016年11月18日 15:16:03   投稿:lqh  
這篇文章主要介紹了JAVA 內(nèi)部類詳解及實例的相關(guān)資料,需要的朋友可以參考下

JAVA 內(nèi)部類

一、什么是內(nèi)部類?

  一個類的定義放在另一個類的內(nèi)部,這個類就叫做內(nèi)部類

二、內(nèi)部類有那些特性?

  1、內(nèi)部類仍然是一個獨立的類,在編譯之后內(nèi)部類會被編譯成獨立的.class文件,但是前面冠以外部類的類名和$符號 。
  2、內(nèi)部類不能用普通的方式訪問。內(nèi)部類是外部類的一個成員,因此內(nèi)部類可以自由地訪問外部類的成員變量,無論是否是private的 。
  3、內(nèi)部類聲明成靜態(tài)的,就不能隨便的訪問外部類的成員變量了,此時內(nèi)部類只能訪問外部類的靜態(tài)成員變量 。

三、內(nèi)部類有哪幾種?

  1.成員內(nèi)部類

    如:

package com.test01;

public class A {
  // 內(nèi)部類 B 繼承 TestPojo 和實現(xiàn) TestInterface 接口
  class B extends TestPojo implements TestInterface{
    //內(nèi)部類 B 自己的方法
    public void run(){
      System.out.println("我正在跑!");
    }
    //重寫的接口方法
    public void testf() {
      System.out.println("實現(xiàn)接口!");
    }
  } 
  // 方法里面調(diào)用內(nèi)部類
  public void test(){
    B b = new B() ;
    b.testf() ;    // 掉用重寫接口方法
    b.run() ;     // 調(diào)用自己的方法
    b.testpojo() ;   // 調(diào)用繼承父類的方法
  }
  // main 方法測試
  public static void main(String[] args) {
    A a = new A() ;
    a.test() ;
  }
}
// 定義了一個接口 ,方法為testf() 
interface TestInterface{
  public void testf() ;
}
// 定義了一個普通類 方法testpojo() 
class TestPojo{
  public void testpojo(){
    System.out.println("我是簡單的pojo類");
  }
}
// 實現(xiàn) 調(diào)用內(nèi)部類里面的方法
class Textone{
  public static void main(String[] args) {
    A.B b = new A().new B() ;  //調(diào)用類A里面的內(nèi)部類B
    /** 等同于 下面代碼
     *     A a = new A() ;
     *     A.B b = a.new B() ;
     * */
    b.testf() ;   // 掉用重寫接口方法
    b.run() ;    // 調(diào)用自己的方法
    b.testpojo() ;  // 調(diào)用繼承父類的方法
  }
}

  2、方法內(nèi)部類

package com.test01;

public class PerTest {
  public void test(){     // 定義一個方法
    class Ne{        // 定義一個方法內(nèi)部類
      public void fle(){  // 定義方法內(nèi)部類的方法 
        System.out.println("我正在飛翔!");
      }
    } ;
    new Ne().fle() ;    //調(diào)用內(nèi)部類的方法
  }
  public static void main(String[] args) {
    new PerTest().test() ;  //測試
  }
}

  注意: (1)、方法內(nèi)部類只能在定義該內(nèi)部類的方法內(nèi)實例化,不可以在此方法外對其實例化。

      (2)、方法內(nèi)部類對象不能使用該內(nèi)部類所在方法的非final局部變量。        

      因為方法的局部變量位于棧上,只存在于該方法的生命期內(nèi)。當一個方法結(jié)束,其棧結(jié)構(gòu)被刪除,
      局部變量成為歷史。但是該方法結(jié)束之后,在方法內(nèi)創(chuàng)建的內(nèi)部類對象可能仍然存在于堆中!
      例如,如果對它的引用被傳遞到其他某些代碼,并存儲在一個成員變量內(nèi)。正因為不能保證局部變
      量的存活期和方法內(nèi)部類對象的一樣長,所以內(nèi)部類對象不能使用它們。 (該理解來源于百度百科)

   3、匿名內(nèi)部類

      1)、抽象匿名內(nèi)部類    

package com.anonymous;

public class AbstractClass {
  public void test(){        //方法為test
    TestA a = new TestA(){    //實現(xiàn)抽象類
      @Override
      public void run() {    //實現(xiàn)抽象類的方法
        System.out.println("我正在使用抽象匿名內(nèi)部類");
      }
    } ;
    a.run() ;          //調(diào)用內(nèi)部類的方法
  }
  public static void main(String[] args) {
    new AbstractClass().test() ;  //測試
  }
}
//定義一個抽象類 TestA 抽象方法為run()
abstract class TestA{
  public abstract void run() ;
}

    2)、接口匿名內(nèi)部類

package com.anonymous;

public class TestAnonymous {
  MyInterface m = new MyInterface(){  //實現(xiàn)接口
    public void eat() {        //重寫MyInterface 接口方法
      System.out.println("我正在吃飯!");
    }
  } ;
  public void ss(){  //方法ss
    m.eat() ;    //調(diào)用重寫的方法
  }
  public static void main(String[] args) {
    new TestAnonymous().ss() ;  //測試
  }
}
//定義一個接口 方法為 eat
interface MyInterface{
  public void eat() ;
}

  注意:匿名內(nèi)部 類 可以定義在方法內(nèi)也可以定義在類的成員中,不管是那種匿名內(nèi)部類都不能被外部類直接調(diào)用

四、內(nèi)部類的作用?

  每個內(nèi)部類都能獨立地繼承自一個(接口的)實現(xiàn),所以無論外圍類是否已經(jīng)繼承了某個(接口的)實現(xiàn),對于內(nèi)部類都沒有影響。如果沒有內(nèi)部類提供的可以繼承多個具體的或抽象的類的能力,一些設計與編程問題就很難解決。從這個角度看,內(nèi)部類使得多重繼承的解決方案變得完整。

接口解決了部分問題,而內(nèi)部類有效地實現(xiàn)了“多重繼承”。

感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!

相關(guān)文章

  • JavaWeb Maven詳解相關(guān)配置

    JavaWeb Maven詳解相關(guān)配置

    這篇文章主要介紹了使用maven架構(gòu)管理開發(fā)的相關(guān)配置,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-06-06
  • SpringBoot web靜態(tài)資源配置詳解

    SpringBoot web靜態(tài)資源配置詳解

    這篇文章主要介紹了SpringBoot web靜態(tài)資源配置詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-10-10
  • 利用Java代碼實現(xiàn)區(qū)塊鏈技術(shù)

    利用Java代碼實現(xiàn)區(qū)塊鏈技術(shù)

    這篇文章主要介紹了利用Java代碼實現(xiàn)區(qū)塊鏈技術(shù),區(qū)塊鏈的應用范圍幾乎無窮無盡,關(guān)于區(qū)塊鏈是如何運作的,下文來看看具體的內(nèi)容介紹吧,需要的朋友可以參考一下
    2022-04-04
  • JAVA參數(shù)傳遞方式實例淺析【按值傳遞與引用傳遞區(qū)別】

    JAVA參數(shù)傳遞方式實例淺析【按值傳遞與引用傳遞區(qū)別】

    這篇文章主要介紹了JAVA參數(shù)傳遞方式,結(jié)合實例形式分析了java按值傳遞與引用傳遞區(qū)別及相關(guān)操作注意事項,需要的朋友可以參考下
    2020-05-05
  • Spring中的事務管理及實現(xiàn)方式解析

    Spring中的事務管理及實現(xiàn)方式解析

    這篇文章主要介紹了Spring中的事務管理及實現(xiàn)方式解析,Spring事務管理基于底層數(shù)據(jù)庫本身的事務處理機制,數(shù)據(jù)庫事務的基礎,是掌握Spring事務管理的基礎,這篇總結(jié)下Spring事務,需要的朋友可以參考下
    2024-01-01
  • 使用BigInteger實現(xiàn)除法取余

    使用BigInteger實現(xiàn)除法取余

    這篇文章主要介紹了使用BigInteger實現(xiàn)除法取余操作,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-08-08
  • 解決MyEclipse中Maven設置jdk版本jdk1.8報錯問題

    解決MyEclipse中Maven設置jdk版本jdk1.8報錯問題

    今天安裝了jdk1.8、tomcat8、和maven3.5.2,弄好后在myeclipse新建了一個maven項目,項目默認是jdk1.5,改成jdk1.8后項目報錯
    2018-10-10
  • Spring boot中使用ElasticSearch的方法詳解

    Spring boot中使用ElasticSearch的方法詳解

    這篇文章主要給大家介紹了關(guān)于Spring boot中使用ElasticSearch的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家的學習或工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-01-01
  • 簡單易懂的MyBatis分庫分表方案分享

    簡單易懂的MyBatis分庫分表方案分享

    這篇文章主要給大家介紹了關(guān)于MyBatis分庫分表方案的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者使用MyBatis具有一定的參考學習價值,需要的朋友們下面來一起學習學習吧
    2019-03-03
  • 詳解JAVA SPI機制和使用方法

    詳解JAVA SPI機制和使用方法

    這篇文章主要介紹了JAVA SPI機制的相關(guān)知識以及使用示例,文中代碼非常詳細,幫助大家更好的學習,感興趣的朋友可以了解下
    2020-06-06

最新評論

思南县| 郎溪县| 都昌县| 皮山县| 贵定县| 淳化县| 岳普湖县| 邢台县| 突泉县| 黑龙江省| 安阳县| 绥宁县| 五峰| 双辽市| 抚顺县| 阿克陶县| 扎兰屯市| 芷江| 临澧县| 获嘉县| 沁源县| 凌云县| 丹江口市| 米泉市| 新竹市| 阳东县| 永春县| 宜兰市| 兰西县| 隆昌县| 克拉玛依市| 莲花县| 绿春县| 彰武县| 方正县| 无棣县| 安国市| 牡丹江市| 湖北省| 麦盖提县| 丰县|