內部類和枚舉類


內部類:

內部類的定義 :

  在一個類的內部又定義了一個類,里面的這個類就是內部類。

  內部類可以定義在外部類的成員位置(與成員變量的位置相同)或局部位置(意思是,把類寫在外部類的方法里面)。

什么時候使用內部類 :

   一個具體的事物里面還有一個具體的事物。比如汽車中有發動機。

1、成員內部類

1.將內部類,定義在了外部類的成員位置。

2.成員內部類,可以使用成員修飾符:public、static等。但是一般也不寫,因為開發也不怎么用。

3.成員內部類,畢竟是一個類,可以繼承,也可以實現接口...

4.調用規則:

          內部類可以使用外部類的成員,包括私有(因為內部類沒有出去外部類的范圍)。[例1]

          外部類要使用內部類的成員,必須要創建內部類的對象。

package com;

public class Outer {
    private int a = 1;
    class Inner{  //在外部類成員的位置定義內部類
        public void fun(){
            System.out.println(a);//內部類可以使用外部類的成員。
        }
    }
}
class test1{
    public static void main(String[] args) {
        Outer.Inner oi = new Outer().new Inner();    //創建內部類的對象的格式。
        oi.fun();
    }
}

結果:1

內部類中同名變量的調用:

package com;

public class Outer {
    private int a = 1;
    class Inner{  //在外部類成員的位置定義內部類
        private int a = 2;
        public void fun(){
            int a = 3;
            System.out.println(a);//內部類可以使用外部類的成員。取所在方法的值
        }
    }
}
class test1{
    public static void main(String[] args) {
        Outer.Inner oi = new Outer().new Inner();    //創建內部類的對象的格式。
        oi.fun();
    }
}

結果:3

 

package com;

public class Outer {
    private int a = 1;
    class Inner{  //在外部類成員的位置定義內部類
        private int a = 2;
        public void fun(){
            int a = 3;
            System.out.println(this.a);//內部類可以使用外部類的成員。取所在類的值
        }
    }
}
class test1{
    public static void main(String[] args) {
        Outer.Inner oi = new Outer().new Inner();    //創建內部類的對象的格式。
        oi.fun();
    }
}

結果:2

 

package com;

public class Outer {
    private int a = 1;
    class Inner{  //在外部類成員的位置定義內部類
        private int a = 2;
        public void fun(){
            int a = 3;
            System.out.println(Outer.this.a);//內部類可以使用外部類的成員。取所在類的外部類的值
        }
    }
}
class test1{
    public static void main(String[] args) {
        Outer.Inner oi = new Outer().new Inner();    //創建內部類的對象的格式。
        oi.fun();
    }
}

結果:1

 

局部內部類:

定義在成員方法里面。

package com;

public class Outer {
    public void out(){
        class Inner{//類定義在方法里面。
            public void fun(){
                System.out.println("aaa");
            }
        }
        System.out.println("我是一個方法。");
        Inner inner = new Inner();//在方法內部使用這個類。否則在main中沒法使用這個類。
        inner.fun();
    }
} 
class test1{
    public static void main(String[] args) {
        Outer o = new Outer();
        o.out();
    }
}

結果:aaa

 

內部類的實際使用--匿名內部類 :

匿名內部類的格式:

      new 接口或父類(){

              重寫抽象方法

      };

匿名內部類的使用舉例:

 

枚舉類:

要點:

    • 使用的是enum關鍵字而不是class。
    • 多個枚舉變量直接用逗號隔開。
    • 枚舉變量最好大寫,多個單詞之間使用”_”隔開(比如:INT_SUM)。
    • 定義完所有的變量后,以分號結束,如果只有枚舉變量,而沒有自定義變量,分號可以省略(例如上面的代碼就忽略了分號)。
    • 在其他類中使用enum變量的時候,只需要【類名.變量名】就可以了,和使用靜態變量一樣。

最簡單的使用:

package com;

enum Weekday{
    SUN,MON,TUS,WED,THU,FRI,SAT 
}
public class test2 {
    public static void main(String[] args) {
        System.out.println(Weekday.valueOf("mon".toUpperCase()));//MON
        for (Weekday w:Weekday.values()){
            System.out.println(w + ".ordinal() ===>" +w.ordinal());
        }
//        SUN.ordinal() ===>0
//        MON.ordinal() ===>1
//        TUS.ordinal() ===>2
//        WED.ordinal() ===>3
//        THU.ordinal() ===>4
//        FRI.ordinal() ===>5
//        SAT.ordinal() ===>6

    }
}

常用的方法和功能:

1、Weekday.valueOf() 方法:

  它的作用是傳來一個字符串,然后將它轉變為對應的枚舉變量。前提是你傳的字符串和定義枚舉變量的字符串一抹一樣,區分大小寫。如果你傳了一個不存在的字符串,那么會拋出異常。

package com;

enum Weekday{
    SUN,MON,TUS,WED,THU,FRI,SAT
}
public class test2 {
    public static void main(String[] args) {
        System.out.println(Weekday.valueOf("mon".toUpperCase())); 
    }
}

結果:MON

 

2、Weekday.values()方法:

  這個方法會返回包括所有枚舉變量的數組。在該例中,返回的就是包含了七個星期的Weekday[]。可以方便的用來做循環。

 

 枚舉變量的.ordinal()方法:

 

  默認情況下,枚舉類會給所有的枚舉變量一個默認的次序,該次序從0開始,類似於數組的下標。而.ordinal()方法就是獲取這個次序(或者說下標)

 

 

 

package com;

enum Weekday{
    SUN,MON,TUS,WED,THU,FRI,SAT
}
public class test2 {
    public static void main(String[] args) {
        System.out.println(Weekday.values());
        for (Weekday w:Weekday.values()){
            System.out.println(w + ".ordinal() ===>" +w.ordinal());
        }
    }
}

結果:

 

3、枚舉變量的toString()方法:

  該方法直接返回枚舉定義枚舉變量的字符串,比如MON就返回【”MON”】。

 

 

5、枚舉變量的compareTo()方法:

  該方法用來比較兩個枚舉變量的”大小”,實際上比較的是兩個枚舉變量的次序,返回兩個次序相減后的結果,如果為負數,就證明變量1”小於”變量2 (變量1.compareTo(變量2),返回【變量1.ordinal() - 變量2.ordinal()】)

 

6、枚舉類的name()方法:

  它和toString()方法的返回值一樣。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM