欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

JAVA 內(nèi)部類

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

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

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

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

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

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

    如:

package com.test01;

public class A {
  // 內(nèi)部類 B 繼承 TestPojo 和實(shí)現(xiàn) TestInterface 接口
  class B extends TestPojo implements TestInterface{
    //內(nèi)部類 B 自己的方法
    public void run(){
      System.out.println("我正在跑!");
    }
    //重寫的接口方法
    public void testf() {
      System.out.println("實(shí)現(xiàn)接口!");
    }
  } 
  // 方法里面調(diào)用內(nèi)部類
  public void test(){
    B b = new B() ;
    b.testf() ;    // 掉用重寫接口方法
    b.run() ;     // 調(diào)用自己的方法
    b.testpojo() ;   // 調(diào)用繼承父類的方法
  }
  // main 方法測(cè)試
  public static void main(String[] args) {
    A a = new A() ;
    a.test() ;
  }
}
// 定義了一個(gè)接口 ,方法為testf() 
interface TestInterface{
  public void testf() ;
}
// 定義了一個(gè)普通類 方法testpojo() 
class TestPojo{
  public void testpojo(){
    System.out.println("我是簡(jiǎn)單的pojo類");
  }
}
// 實(shí)現(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(){     // 定義一個(gè)方法
    class Ne{        // 定義一個(gè)方法內(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() ;  //測(cè)試
  }
}

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

      (2)、方法內(nèi)部類對(duì)象不能使用該內(nèi)部類所在方法的非final局部變量?!       ?/p>

      因?yàn)榉椒ǖ木植孔兞课挥跅I?,只存在于該方法的生命期?nèi)。當(dāng)一個(gè)方法結(jié)束,其棧結(jié)構(gòu)被刪除,
      局部變量成為歷史。但是該方法結(jié)束之后,在方法內(nèi)創(chuàng)建的內(nèi)部類對(duì)象可能仍然存在于堆中!
      例如,如果對(duì)它的引用被傳遞到其他某些代碼,并存儲(chǔ)在一個(gè)成員變量?jī)?nèi)。正因?yàn)椴荒鼙WC局部變
      量的存活期和方法內(nèi)部類對(duì)象的一樣長(zhǎng),所以內(nèi)部類對(duì)象不能使用它們。 (該理解來源于百度百科)

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

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

package com.anonymous;

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

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

package com.anonymous;

public class TestAnonymous {
  MyInterface m = new MyInterface(){  //實(shí)現(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() ;  //測(cè)試
  }
}
//定義一個(gè)接口 方法為 eat
interface MyInterface{
  public void eat() ;
}

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

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

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

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

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

相關(guān)文章

  • Spring boot + mybatis + orcale實(shí)現(xiàn)步驟實(shí)例代碼講解

    Spring boot + mybatis + orcale實(shí)現(xiàn)步驟實(shí)例代碼講解

    這篇文章主要介紹了Spring boot + mybatis + orcale的實(shí)現(xiàn)步驟實(shí)例代碼講解,需要的朋友可以參考下
    2017-12-12
  • Java異常處理try?catch的基本使用

    Java異常處理try?catch的基本使用

    大家好,本篇文章主要講的是Java異常處理try?catch的基本使用,感興趣的同學(xué)趕快來看一看吧,對(duì)你有幫助的話記得收藏一下
    2022-02-02
  • MyBatis 實(shí)現(xiàn)批量插入和刪除中雙層循環(huán)的寫法案例

    MyBatis 實(shí)現(xiàn)批量插入和刪除中雙層循環(huán)的寫法案例

    這篇文章主要介紹了MyBatis 實(shí)現(xiàn)批量插入和刪除中雙層循環(huán)的寫法案例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2021-01-01
  • java基礎(chǔ)--JDK SPI概述

    java基礎(chǔ)--JDK SPI概述

    SPI是一種服務(wù)發(fā)現(xiàn)機(jī)制,本文就SPI做了詳細(xì)概述,具有很好的參考價(jià)值,希望對(duì)小伙伴們有所幫助,感興趣的朋友一起來參考參考吧
    2021-08-08
  • 雙token實(shí)現(xiàn)token超時(shí)策略示例

    雙token實(shí)現(xiàn)token超時(shí)策略示例

    用于restful的app應(yīng)用無狀態(tài)無sesion登錄示例,需要的朋友可以參考下
    2014-02-02
  • 詳解Java中方法重寫與重載的區(qū)別(面試高頻問點(diǎn))

    詳解Java中方法重寫與重載的區(qū)別(面試高頻問點(diǎn))

    這篇文章主要介紹了Java中方法重寫與重載的區(qū)別(面試高頻問點(diǎn)),本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-03-03
  • Java實(shí)現(xiàn)單例模式的五種方法介紹

    Java實(shí)現(xiàn)單例模式的五種方法介紹

    單例模式確保某個(gè)類只有一個(gè)實(shí)例,而且自行實(shí)例化并向整個(gè)系統(tǒng)提供這個(gè)實(shí)例。在計(jì)算機(jī)系統(tǒng)中,線程池、緩存、日志對(duì)象、對(duì)話框、打印機(jī)、顯卡的驅(qū)動(dòng)程序?qū)ο蟪1辉O(shè)計(jì)成單例
    2023-01-01
  • java解決Feign異步情況丟失上下文問題

    java解決Feign異步情況丟失上下文問題

    在微服務(wù)的開發(fā)中,我們經(jīng)常需要服務(wù)之間的調(diào)用,本文主要介紹了java解決Feign異步情況丟失上下文問題,具有一定的參考價(jià)值,感興趣的可以了解一下
    2023-08-08
  • Mybatis攔截器打印sql問題

    Mybatis攔截器打印sql問題

    這篇文章主要介紹了Mybatis攔截器打印sql問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-03-03
  • Java創(chuàng)建線程的方式解析

    Java創(chuàng)建線程的方式解析

    這篇文章主要介紹了Java創(chuàng)建線程的方式解析,文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下,希望對(duì)你的學(xué)習(xí)有所幫助
    2022-07-07

最新評(píng)論