java - 内部类

2017-08-07  本文已影响14人  司鑫
一 定义

内部类就是将一个类的定义放在另一个类的定义内部。

二 特性

内部类最大的一个优点就是每个内部类都能独立的继承一个(接口的)实现,所以无论外围类是否已经继承了某个(接口的)实现,对于内部类都没有影响。

三 内部类的创建

外围类中的内部类可以无限的访问外围类的属性和方法,内部类只有在编译期中存在,当编译成功后,那么内部类便会和外围类分离,生成两个类OutterClass.classOuterClass$InnerClass.class

public class OuterClass {
    private String name ;
    private int age;

    /**省略getter和setter方法**/
    
    public class InnerClass{
        public InnerClass(){
            name = "小毛毛";
            age = 20;
        }
        
        public void display(){
            System.out.println("name:" + getName() +"   ;age:" + getAge());
        }
    }
    
    public static void main(String[] args) {
        OuterClass outerClass = new OuterClass();
        OuterClass.InnerClass innerClass = outerClass.new InnerClass(); //创建一个内部类
        innerClass.display();
    }
}
四 内部类的种类

public class Parcel5 {
    public Destionation destionation(String str){
        class PDestionation implements Destionation{
            private String label;
            private PDestionation(String whereTo){
                label = whereTo;
            }
            public String readLabel(){
                return label;
            }
        }
        return new PDestionation(str);
    }
    
    public static void main(String[] args) {
        Parcel5 parcel5 = new Parcel5();
        Destionation d = parcel5.destionation("小毛毛");
    }
}
public class OuterClass {
    public InnerClass getInnerClass(final int num,String str2){
        return new InnerClass(){
            int number = num + 1;
            public int getNumber(){
                return number;
            }
        };   
    }
    
    public static void main(String[] args) {
        OuterClass out = new OuterClass();
        InnerClass inner = out.getInnerClass(2, "小毛毛");
        System.out.println(inner.getNumber());
    }
}

interface InnerClass {
    int getNumber();
}

对于匿名内部类来说

上一篇 下一篇

猜你喜欢

热点阅读