1 class Outer{        //定义外部类
 2     private String info = "hello world!" ;        //定义外部类的私有属性
 3     class Inner{            //定义内部类
 4         public void print(){        //定义内部类的方法
 5             System.out.println(info) ;        //直接访问外部类的私有属性
 6         }
 7     }
 8     public void fun(){        //定义外部类的方法
 9         new Inner().print() ;        //通过内部类实例化对象调用内部方法
10     }    
11 }
12 public class InnerClassDemo01{
13     public static void main(String [] args){
14         new Outer().fun() ;            //调用外部类的fun()方法
15     }
16 }

以上的程序中,Inner类作为Outer类的内部类存在,并且在外部类的fun()方法中直接实例化内部类的对象并调用print()方法。

class Outer{        //定义外部类
    private String info = "hello world!" ;        //定义外部类的私有属性
    public void fun(){        //定义外部类的方法        
        new Inner(this).print() ;        //通过内部类实例化对象调用内部方法
    }    
    public String getInfo(){
        return this.info ;
    }
}
class Inner{            //定义内部类
    private Outer out = null ;        //声明outer对象
    public Inner(Outer out){
        this.out = out ;
    }
    public void print(){        //定义内部类的方法
        System.out.println(this.out.getInfo()) ;        //直接访问外部类的私有属性
    }

}
public class InnerClassDemo02{
    public static void main(String [] args){
        new Outer().fun() ;            //调用外部类的fun()方法
    }
}

如果将内部类拿到外部之后,会发现代码增加了,而且复杂度也增加了,使用内部类的最大优点,可以方便的访问外部类的的私有属性。

但是,在上面的内部类中是无法在外部类直接调用的

 

二、使用static 声明内部类

  如果一个内部类使用static关键字申明,则此内部类就成为外部类,可以通过外部类.内部类直接访问。但是想访问外部类总的属性,此属性必须是static访问权限的。

class Outer{        //定义外部类
    private static String info = "hello world!" ;        //定义外部类的私有属性
    static class Inner{            //定义内部类
        public void print(){        //定义内部类的方法
            System.out.println(info) ;        //直接访问外部类的私有属性
        }
    }
}
public class InnerClassDemo03{
    public static void main(String [] args){
        new Outer.Inner().print() ;            //调用外部类的fun()方法
    }
}

三、在外部访问内部类

一个内部类除了可以通过外部类访问也可以直接在其他类中调用,但是调用的格式:

· 外部类.内部类 内部类对象 = 外部类实例.new 内部类() ;

class Outer{        //定义外部类
    private String info = "hello world !" ;            //定义外部类的私有属性
    class Inner{        //定义内部类
        public void print(){    //定义内部类方法
            System.out.println(info) ;        //直接访问外部类私有属性
        }
    }
}
public class InnerClassDemo04{
    public static void main (String [] args){
        Outer out = new Outer() ;        //外部类实例化对象
        Outer.Inner in = out.new Inner() ;        //实例化内部类对象
        in.print() ;        //调用内部类方法
    }
}

四、在方法中定义内部类

在方法中声明的内部类需要访问方法中的参数的时候,参数必须被final修饰的。

class Outer{        //定义外部类
    private String info = "hello world !" ;            //定义外部类的私有属性
    public void fun(final int temp){
        class Inner{        //在方法中定义内部类
            public void print(){    //定义内部类方法
                System.out.println("类中的属性"+info) ;        //直接访问外部类私有属性
                System.out.println("方法中的参数"+temp ) ;
            }
        }
    new Inner().print() ;
    }
}
public class InnerClassDemo05{
    public static void main (String [] args){
        new Outer().fun(30) ;
    }
}

 

posted on 2014-04-23 17:30  似_水流年  阅读(104)  评论(0编辑  收藏  举报