1. 程式人生 > >【Java基礎】--06.java內部類與列舉類

【Java基礎】--06.java內部類與列舉類

一、內部類:

在一個類中宣告另一個類。 裡面的類:內部類 外面的類:外部類

1. 成員內部類:

①是類的成員之一。 (屬性、方法、構造器、程式碼塊)
②內部類可以使用四種訪問控制修飾符(public protected default private)
③static final

    //建立靜態內部類物件
            Person.Mobile pm = new Person.Mobile();       
            pm.message();

            //建立非靜態內部類物件
            //Person p = new Person();
//Person.Computer pc = p.new Computer(); Person.Computer pc = new Person().new Computer(); pc.show();

④內部類的外部類擁有相同的特性。

   class Person{
            Stirng name;
            int age;

            //成員內部類
            public class Computer{
                String name;           

                public
void show(){ System.out.println(this.name); System.out.println(Person.this.name);//區分內部類屬性和外部類屬性 } } static class Mobile{ public void message(){ } } }

2. 區域性內部類:

    //如下方式使用非常少
    public void show(){
        class InnerClass{}
    }


    //若某個類僅適用於當前方法時,可以宣告為區域性內部類
    public Comparator getComparator(){

        class MyComparator implements Comparator{
            public int compare(Object o1, Object o2){
                return 0;
            }           
        }       

        return new MyComparator();
    }   

    public Comparator getComparotor(){
        //匿名內部類
        Comparator com = new Comparator(){
            public int compare(Object o1, Object o2){
                return 0;
            }
        };

        return com;
    }   


    pulbic Comparator getComparator(){
        return new Comparator(){
            public int compare(Object o1, Object o2){
                return 0;
            }
        };
    }           

二、列舉類:

jdk1.5後出的新特性,可以定義有限數量的可窮舉資料集。
簡而言之,當確定一個類有幾個物件時,使用列舉。

1. 自定義列舉類

①私有化構造器
②類內部建立物件

class Season{

    //類內部建立物件
    public static final Season SPRING = new Season();
    public static final Season SUMMER = new Season();   
    public static final Season AUTUMN = new Season();   
    public static final Season WINTER = new Season();   

    //私有化構造器
    private Season(){}

}

2. 使用 enum 關鍵字建立列舉類

enum Season{
    SPRING,
    SUMMER,   
    AUTUMN,   
    WINTER;
}

列舉類常用方法:

valueOf(String name) : 根據name列舉類物件名稱,獲取指定的列舉類物件
values() : 獲取當前列舉類中所有列舉類物件的陣列

3. 列舉類實現介面

public enum Season implements MyInterface{
    SPRING{
        public void show(){
            System.out.println("春天");
        }
    },
    SUMMER{
        public void show(){
            System.out.println("夏天");
        }
    },
    AUTUMN{
        public void show(){
            System.out.println("秋天");
        }
    },
    WINTER{
        public void show(){
            System.out.println("冬天");
        }
    };

//    @Override
//    public void show() {
//        System.out.println("季節");
//    }
}