天天看點

内部類

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     }      

此為本人學習筆記,若有錯誤,請不吝賜教