内部类与Enum

内部类Iner class
    最大特点:可以直接访问私有属性
    分类:
        1 局部内部类            (有类名,外部类局部位置)【局部内部类中变量与方法中局部变量(是final的)重名无法区分】(反射?)
            定义在方法或代码块中                            【可以是抽象类】
            作用域:此方法或代码块
            局部内部类还是类可以被继承,但是final修饰就不行了
            可以访问外部类所有成员,包括私有
            不能添加访问修饰符,地位相对于局部变量,所以可以用final(局部变量也可以用final)
            
            
            内部类访问外部类:直接访问,重名默认就近原则  区分用外部类名称点.this.成员
            外部类访问内部类:创建对象,再访问(必须要在作用域中才能访问)【构造器中也能访问】
            外部其他类:不能访问局部内部类,因为其地位是一个局部变量
            
        2 匿名内部类            (无类名,外部类局部位置)【重点】【用的地方特别多】  【匿名内部类中变量与方法中变量重名无法区分】
            new 类或接口(参数列表){                            【不能是抽象类,因为其逻辑上是要创建对象的,写法也没法是抽象类】
            }
            本质是类,内部类,同时是一个对象(运行类型)
            该类没有名字(其实系统分配了名字,但是与你无瓜)  怎么看:一般命名是 外部类名称$int值  用getClass就能看到
            匿名内部类只能使用一次(类加载一次返回对象就无了),注意是类只能使用一次,但是返回的对象可以不断 点
            
            非抽象类也可以使用其匿名内部类(加一个大括号就完全不一样了)
                jvm创建一个匿名内部类继承了这个非抽象类,不过是用一次,创建一个对象返回 就销毁
            
            匿名内部类只能使用一次,所以其内部不能有构造器/构造方法
                (和父类构造器一样?但其不是父类了,和getClass得到的一样?不行,jvm的我们用不了)
            继承/实现+新写类+创建实例+(一次性销毁)
            
            同 局部内部类
                定义在方法或代码块中
                作用域:此方法或代码块
                可以访问外部类所有成员,包括私有
                不能添加访问修饰符,地位相对于局部变量,所以可以用final(局部变量也可以用final)
            
            内部类访问外部类:直接访问,重名默认就近原则  区分用外部类名称点.this.成员(就是调用此方法的对象)
            外部类访问内部类:不能访问【构造器中也不能访问】
            外部其他类:不能访问局部内部类
            
            匿名内部类最佳实践/用途:将匿名内部类当作 实参 传递 (软编码)(改一下,只会影响当前)
                        (用硬编码:写类实现,改一下就会影响所有)
        
        3 成员内部类            (无static,外部类成员位置)【可以是抽象类】
            可以访问外部类所有成员,包括私有
            可以添加访问修饰符,因为地位就是成员变量
            作用域与其他成员一样
            
            内部类访问外部类:直接访问,重名默认就近原则  区分用外部类名称点.this.成员(就是调用此方法的对象)
            外部类访问内部类:创建对象,再访问(必须要在作用域中才能访问)【构造器中也能访问】
            外部其他类:
                1 new 外部类.内部类() 相对于将内部类看作成员
                2 在外部类中,写一个方法,返回内部类对象 相对于getter方法
                3 new 外部类().new内部类()
            
            
        4 静态内部类            (有static,外部类成员位置)【不能是抽象类】
            可以访问外部类所有static成员,包括私有,但是不能访问非静态
            可以添加访问修饰符,因为地位就是成员变量
            作用域与其他成员一样
            
            内部类访问外部类:直接访问,重名默认就近原则  区分用外部类名称点.成员(不要加this了)(就是调用此方法的对象)
            外部类访问内部类:创建对象,再访问(必须要在作用域中才能访问)【构造器中也能访问】
            外部其他类:
                1 new 外部类.内部类() 注意要满足访问权限
                2 外部类中,写一个方法,返回内部类对象
 

枚举
    特殊类,有 有限个特定的对象
    只读,不修改
    实现
        自定义类实现枚举
            1 构造器私有化
            2 setter方法去掉,可以有getter方法
            3 在类内部创建固定的对象,用public static,这样直接用类名点就可以拿到(对象名要有标识性,枚举对象名通常全部大写)
            4 可以再加上final(底层好像没有作用,类还是要加载的)
            
        enum关键字实现枚举
            1 使用enum替代class
            2 常量对象名(实参列表),有多个用逗号间隔  ; 如果使用无参构造器创建枚举对象,那么实参列表与小括号都可以省略
            3 enum实现枚举,要求常量对象写在最前面
            
            使用关键字,底层是final默认继承Enum类  javap工具证明 
            是隐式继承,因为Java是单继承,所以使用这个关键字就不能再继承其他类了,
                但是是可以实现其他接口的
    
    Enum类
        注意:Enum的toString方法已经重写过了 ,返回的就是常量对象名name
        getName方法 返回是常量对象名,子类不能重写
        ordinal方法 返回当前对象的位置号,默认从0开始
        values方法    返回当前枚举类包含所有对象的 一个数组(源码看不到。隐藏了,反编译能看到)
        valueOf方法 将字符串转换为枚举对象,要求字符串必须是已有的枚举对象名,否则抛异常
        comparaTo    比较2个枚举常量,比较的是位置号,返回2编号相减              
                
                
                

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值