1 package com.fu.java4;
2
3 /**
4 * 類的内部成員之五:内部類
5 * 1.Java中允許将一個類A聲明在另一個類B中,則類A就是内部類,類B稱為外部類
6 * 2.内部類的分類:成員内部類(靜态、非靜态) VS 局部内部類(方法内、代碼塊内、構造器内)
7 * 3.成員内部類:
8 * 一方面,作為外部類的成員:
9 * >可以調用外部類的結構
10 * >可以用static修飾
11 *
12 * 另一方面,作為一個類:
13 * >類内可以定義屬性、方法、構造器等
14 * >可以被final修飾,表示此類不能被繼承。言外之意,不使用final就可以被繼承
15 * >可以被abstract修飾
16 *
17 * 4.關注如下3個問題:
18 * 4.1 如何執行個體化成員内部類的對象
19 * 4.2 如何在成員内部類中區分調用外部類的結構
20 * 4.3 開發中,局部内部類的使用
21 *
22 */
23 public class InnerClassTest {
24 public static void main(String[] args) {
25 //建立Brain的執行個體(靜态的)
26 Person.Brain brain = new Person.Brain();
27 //建立Leg的執行個體(非靜态的)
28 // Person.Leg leg = new Person.Leg();//錯誤的
29 Person p = new Person();
30 Person.Leg leg = p.new Leg();
31 leg.display("小腿");
32 }
33 }
34
35 class Person{
36 String name = "人";
37 public void eat(){
38
39 }
40
41 //靜态成員内部類
42 static class Brain{
43 String name;
44 }
45 //非靜态成員内部類
46 class Leg{
47 String name = "腿";
48 public void run(){
49 Person.this.eat();//調用外部類的非靜态屬性
50 }
51 public void display(String name){
52 System.out.println(name);//調用形參
53 System.out.println(this.name);//Leg裡的屬性
54 System.out.println(Person.this.name);//Person裡的屬性
55 }
1 package com.fu.java4;
2
3 public class InnerClassTest1 {
4
5 //開發中很少見
6 public void method() {
7 //局部内部類
8 class AA {
9
10 }
11 }
12
13 //傳回一個實作了Comparable接口的類的對象
14 public Comparable getComparable() {
15 //建立一個實作了Comparable接口的類:局部内部類
16 //方式一
17 // class MyComparable implements Comparable {
18 // @Override
19 // public int compareTo(Object o) {
20 // return 0;
21 // }
22 // }
23 // return new MyComparable();
24 //方式二
25 return new Comparable() {
26 @Override
27 public int compareTo(Object o) {
28 return 0;
29 }
30 };
31 }
32 }
1 public void method(){
2 //局部内部類
3 //局部變量
4 int num = 10;
5 class AA{
6 public void show(){
7 // num = 20;//num預設為final的,不能修改
8 System.out.println(num);
9 }
10 }
11 }
此為本人學習筆記,若有錯誤,請不吝賜教