Java中内部类

Java中内部类大致分为四类:(以下观点只是自己实习过程总的个人总结,若有错误之处,还望指教)

一、静态内部类

      1.static表示该成员只属于该类,为该类所有实例共享

      2.静态内部类相当于外部类的一个静态成员,不能访问外部类的非静态成员

      3.静态内部类的类名不能与外部类同名(个人理解:与外部类同名时,实例化会有歧义,故Java不允许)

二、成员内部类

      1.相当于外部类中的成员变量

      2.在外部类中可以直接进行实例化

      3.在其他类文件访问时 new Outer().new Inner();

 

三、本地内部类(同方法中定义的变量一样,本地内部类只能在定义它的方法中使用,而且不能使用public,private等访问限定符)

      1.本地内部类中不能定义静态的成员变量或方法

      2.本地内部类可以访问Outer Class中的所有成员,不论静态成员还是非静态成员[注:此处描述不准确,应该跟相同位置的普通语句一样。准确的说法应该是:在静态方法中定义的内部类,可访问Enclosing Class中的静态成员,但不能直接访问实例成员;在实例方法中定义的内部类,可以直接访问实例成员和静态成员];而Enclosing Class中不能直接访问本地内部类的成员

      3.同成员内部类一样,在本地内部类的方法中this是内部类当前对象的引用,如果需要访问当前的外部类对象需要使用Outer.this

      4.内部类可以访问包含它的方法中的变量或方法的参数,但是这些变量或参数必须定义为final,内部类中不能改变它们

另:

     1.所有内部类的类名都不能与外部类同名

     2.所有内部类在编译时都会生成相应的.class文件

四、匿名内部类

     1.匿名内部类是没有名字的内部类,它在建立对象的时候完成对类的定义,而不需要给类起名字

     2.可以通过指定类要实现的接口来创建匿名内部类,但是只能有一个接口

     3.匿名内部类对Enclosing Class的访问权限同本地内部类相同

     4.匿名内部类最常见的用途是在建立GUI应用程序时为组件添加事件监听器对象

     5.名内部类不能定义构造函数

public class Outer {
    private String msg = "Outer";
    private static int number = 0;
    
    /** 静态内部类*/
    static class staticInner {
        //private String msg ="staticInner";
        public static int number = 1;
        
        private void innerMethod() {
            //就近原则,若要访问外部类则Outer.number
            System.out.println(Outer.number);
        }
    }
    
    /** 本地内部类*/
    @Test
    public void test() {   
        Inner2 e=new Inner2();
        System.out.println(e.msg);
        class Inner1{
            private String msg = "Inner1";
            
            public Inner1() {
                Inner2 inner2 = new Inner2();
            }
        }
    }
    
    /**成员内部类*/
    private class Inner2 {
        private int number;
        private String msg = "Inner2";
        private Inner2(){
           
        }
    } 
}

 

 

 

 

 

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值