激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Java教程 - Java 基礎之內部類詳解及實例

Java 基礎之內部類詳解及實例

2020-09-04 14:13Java教程網 Java教程

這篇文章主要介紹了 Java 基礎之內部類詳解及實例的相關資料,需要的朋友可以參考下

 Java 基礎之內部類詳解及實例

內部類不是很好理解,但說白了其實也就是一個類中還包含著另外一個類

如同一個人是由大腦、肢體、器官等身體結果組成,而內部類相當于其中的某個器官之一,例如心臟:它也有自己的屬性和行為(血液、跳動)

顯然,此處不能單方面用屬性或者方法表示一個心臟,而需要一個類

而心臟又在人體當中,正如同是內部類在外部內當中

 實例1:內部類的基本結構

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
//外部類
class Out {
  private int age = 12;
   
  //內部類
  class In {
    public void print() {
      System.out.println(age);
    }
  }
}
 
public class Demo {
  public static void main(String[] args) {
    Out.In in = new Out().new In();
    in.print();
    //或者采用下種方式訪問
    /*
    Out out = new Out();
    Out.In in = out.new In();
    in.print();
    */
  }
}

運行結果:12

從上面的例子不難看出,內部類其實嚴重破壞了良好的代碼結構,但為什么還要使用內部類呢?

因為內部類可以隨意使用外部類的成員變量(包括私有)而不用生成外部類的對象,這也是內部類的唯一優點

如同心臟可以直接訪問身體的血液,而不是通過醫生來抽血

程序編譯過后會產生兩個.class文件,分別是Out.class和Out$In.class

其中$代表了上面程序中Out.In中的那個 .

Out.In in = new Out().new In()可以用來生成內部類的對象,這種方法存在兩個小知識點需要注意

  1.開頭的Out是為了標明需要生成的內部類對象在哪個外部類當中

  2.必須先有外部類的對象才能生成內部類的對象,因為內部類的作用就是為了訪問外部類中的成員變量

實例2:內部類中的變量訪問形式

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
class Out {
  private int age = 12;
   
  class In {
    private int age = 13;
    public void print() {
      int age = 14;
      System.out.println("局部變量:" + age);
      System.out.println("內部類變量:" + this.age);
      System.out.println("外部類變量:" + Out.this.age);
    }
  }
}
 
public class Demo {
  public static void main(String[] args) {
    Out.In in = new Out().new In();
    in.print();
  }
}

運行結果:

局部變量:14
內部類變量:13
外部類變量:12

從實例1中可以發現,內部類在沒有同名成員變量和局部變量的情況下,內部類會直接訪問外部類的成員變量,而無需指定Out.this.屬性名

否則,內部類中的局部變量會覆蓋外部類的成員變量

而訪問內部類本身的成員變量可用this.屬性名,訪問外部類的成員變量需要使用Out.this.屬性名

實例3:靜態內部類

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
class Out {
  private static int age = 12;
   
  static class In {
    public void print() {
      System.out.println(age);
    }
  }
}
 
public class Demo {
  public static void main(String[] args) {
    Out.In in = new Out.In();
    in.print();
  }
}

運行結果:12

可以看到,如果用static 將內部內靜態化,那么內部類就只能訪問外部類的靜態成員變量,具有局限性

其次,因為內部類被靜態化,因此Out.In可以當做一個整體看,可以直接new 出內部類的對象(通過類名訪問static,生不生成外部類對象都沒關系)

實例4:私有內部類

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
class Out {
  private int age = 12;
   
  private class In {
    public void print() {
      System.out.println(age);
    }
  }
  public void outPrint() {
    new In().print();
  }
}
 
public class Demo {
  public static void main(String[] args) {
    //此方法無效
    /*
    Out.In in = new Out().new In();
    in.print();
    */
    Out out = new Out();
    out.outPrint();
  }
}

運行結果:12

如果一個內部類只希望被外部類中的方法操作,那么可以使用private聲明內部類

上面的代碼中,我們必須在Out類里面生成In類的對象進行操作,而無法再使用Out.In in = new Out().new In() 生成內部類的對象

也就是說,此時的內部類只有外部類可控制

如同是,我的心臟只能由我的身體控制,其他人無法直接訪問它

實例5:方法內部類

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
class Out {
  private int age = 12;
 
  public void Print(final int x) {
    class In {
      public void inPrint() {
        System.out.println(x);
        System.out.println(age);
      }
    }
    new In().inPrint();
  }
}
 
public class Demo {
  public static void main(String[] args) {
    Out out = new Out();
    out.Print(3);
  }
}

運行結果:

3
12

在上面的代碼中,我們將內部類移到了外部類的方法中,然后在外部類的方法中再生成一個內部類對象去調用內部類方法

如果此時我們需要往外部類的方法中傳入參數,那么外部類的方法形參必須使用final定義

至于final在這里并沒有特殊含義,只是一種表示形式而已。

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

原文鏈接:http://blog.csdn.net/qq_35101189/article/details/68486034

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 亚洲成人高清在线观看 | 黄网站免费在线看 | 色屁屁xxxxⅹ在线视频 | 999久久国精品免费观看网站 | 成年人黄色片视频 | 在线97视频 | 久久亚洲国产精品 | 叶子楣成人爽a毛片免费啪啪 | 精品国产一区二区三区在线 | 多男操一女视频 | 毛片区| 亚洲福利视频52 | 欧美成人国产va精品日本一级 | 欧美精品v国产精品v日韩精品 | 欧美老外a级毛片 | 免费黄色在线电影 | 免费久久精品 | 欧美a区| 免费男女视频 | 中文字幕在线不卡视频 | 美女毛片在线观看 | 久久久www成人免费毛片 | 九九热免费精品视频 | 自拍偷拍亚洲图片 | 亚洲午夜免费电影 | 久久精品国产精品亚洲 | av成人免费 | 久久影城 | 久久影城| 欧美一区二区三区免费电影 | 欧美日韩大片在线观看 | v11av在线播放 | 久久精精 | 久久久久久久久久久久久久久伊免 | 欧美一级α | 九九视频精品在线 | a一级黄色毛片 | 国产精品视频导航 | 性爱视频在线免费 | 日夜操天天干 | 91成人免费看片 |