java 基础之内部类

内部类的使用

  1内部类对象的创建:

    非静态内部类:Outer.Inner oi  = new Outer().new Inner();

    静态内部类:Outer.Inner oi  = new Outer().Inner();

  2内部类的方法调用

    非静态内部类和静态内部类的非静态方法:oi.test();

    静态内部类的静态方法:Inner.test();



public class Test1 {
    private String str1 = "测试静态内部类访问外部非静态变量";
    private static String str2 = "测试静态内部类访问外部静态变量";
    public static void main(String[] args) {
        new Test1().new Inner1().test1();
        new Test1().new Inner1().test2();
        
        new Test1.Inner2().test1();
        new Test1.Inner2().test2();
        Inner2.test3();
        
        
    }
    
    private class Inner1{
        private String str1 = "测试静态内部类与外部类this的区别";
        private static final String str2 = "测试静态内部类中静态字段与外部类this的区别";//非静态内部类中有static的变量必须要有final
        public void test1(){
            System.out.println("测试内部类公共方法");
            System.out.println(str1);
            System.out.println(this.str1);
            System.out.println(Test1.this.str1);
            System.out.println(str2);
            System.out.println(this.str2);
            System.out.println(Test1.this.str2);
        }
        
        private void test2(){
            System.out.println("测试内部类私有方法");
        }
        
//        public static void test3(){//含有静态方法的内部类必须是静态类
//            System.out.println("测试内部类静态私有方法");
//        }
//        
    }
    
    private static class Inner2{
        public void test1(){
            System.out.println("测试静态内部类公共方法");
            //System.out.println(str1);
        }
        
        private void test2(){
            System.out.println("测试静态内部类私有方法");
        }
        
        public static void test3(){
            System.out.println("测试静态内部类静态私有方法");
        }
    }
    

}

 

结果:

测试内部类公共方法
测试静态内部类与外部类this的区别
测试静态内部类与外部类this的区别
测试静态内部类访问外部非静态变量
测试静态内部类中静态字段与外部类this的区别
测试静态内部类中静态字段与外部类this的区别
测试静态内部类访问外部静态变量
测试内部类私有方法
测试静态内部类公共方法
测试静态内部类私有方法
测试静态内部类静态私有方法

 

    3.在其他类中方法的调用:     

      非静态内部类和静态内部类的非静态方法:oi.test();

      静态内部类的静态方法:Outer.Inner.test();

    4.方法内部类,只能在当前方法中被调用,调用时必须在类创建后面创建


public class Outer {
    public void test1(){
        System.out.println("测试外部类类公共方法");
    }
    
    private void test2(){
        System.out.println("测试外部类私有方法");
    }
    
    public void test3(){
        class Inner{
            public void test(){
                System.out.println("测试方法内部类");
            }
        }
        new Inner().test();
        
    }
    
    class Inner1{
        public void test1(){
            System.out.println("测试内部类公共方法");
        }
        
        private void test2(){
            System.out.println("测试内部类私有方法");
        }
    }
    
    static class Inner2{
        public void test1(){
            System.out.println("测试内部类公共方法");
        }
        
        private void test2(){
            System.out.println("测试内部类私有方法");
        }
        
        static void test3(){
            System.out.println("测试内部类静态方法");
        }
    }

}

 
public class Test {
    
    public static void main(String[] args) {
        new Outer().new Inner1().test1();
        new Outer.Inner2().test1();
        Outer.Inner2.test3();
        
        new Outer().test3();
    }
}

测试内部类公共方法
测试内部类公共方法
测试内部类静态方法
测试方法内部类

 

 

    5.1内部类在其他类中创建与调用有权限限制,但在外部类中调用没有权限限制

    5.2含有静态方法的内部类必须是静态类

    5.3静态内部类就只能访问外部类的静态成员变量

    5.4非静态内部类中有static的变量必须要有final,静态内部类则不必须,因为final类型修饰的变量(即常量)可以离开类实例存活一段时间的。

    5.5内部类生成的字节文件名为Outer$Inner.class,方法内部类生成的字节文件名为Outer$1Inner.class

 

posted @ 2015-08-14 22:21  小小攻城师  阅读(136)  评论(0编辑  收藏  举报