国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Java > 正文

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

2019-11-26 13:32:42
字體:
供稿:網(wǎng)友

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() ;  //測試  }}//定義一個接口 方法為 eatinterface 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)部類提供的可以繼承多個具體的或抽象的類的能力,一些設(shè)計與編程問題就很難解決。從這個角度看,內(nèi)部類使得多重繼承的解決方案變得完整。

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

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

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 蓝田县| 北海市| 济宁市| 宜都市| 义马市| 景德镇市| 延寿县| 久治县| 稻城县| 五寨县| 高邑县| 黄石市| 玉树县| 孟村| 林口县| 洛宁县| 定南县| 佛冈县| 浪卡子县| 饶平县| 锦屏县| 林周县| 拉萨市| 理塘县| 磐安县| 黑龙江省| 大田县| 平顶山市| 泰来县| 大姚县| 肇庆市| 西乌珠穆沁旗| 乌苏市| 北海市| 双江| 梁山县| 冕宁县| 清河县| 新乡县| 玛多县| 酒泉市|