内部类的概念和基本用法

内部类的作用

补充外部类的功能

内部类名词介绍

内部类:类中定义的类
外部类:没在类中定义的类

如:
    public class A{
        public class B{
            
        }
    }
    A就是外部类
    B就是内部类

内部类分类

成员内部类:
    在类中方法以外定义的类就是成员内部类
静态内部类:
    用static修饰的成员内部类就是静态内部类
局部内部类
    在方法中定义的类就是局部内部类
匿名内部类
    在值或实参中定义的类就是匿名内部类,没有类名的内部类

成员内部类

如:
    public class A{
        public class B{
            
        }
    }
注意:成员内部类不能定义静态成员,包括但不限于静态属性,静态方法,静态代码块

成员内部类创建对象:
    1,在外部类的非静态方法中
        直接创建内部类对象
        语法:
        内部类类名 对象名 = new 内部类类名(实参列表);
    2,在其他情况呀
        先创建外部类对象,在通过外部类对象创建内部类对象
        语法:
            1,创建外部类对象
            外部类类名 外部类对象名 = new 外部类类名(实参列表);
            2,创建内部类对象
            内部类类名 内部类对象名 = 外部类对象名.new 内部类类名(实参列表);
            
成员内部类中局部变量,内部类属性,外部类属性重名如何区分?
    局部变量:直接书写,使用就近原则
    内部类属性:this.属性名
    外部类属性:外部类类名.this.属性名

静态内部类

如:
    public class A{
        public static class B{
        
        }
    }
注意:外部类不能用static修饰

静态内部类创建对象
    内部类类名 内部类对象名 = new 外部类类名.内部类类名(实参列表);

静态内部类中不能直接使用外部类的非静态成员

局部内部类

如:
    public class A{
        public void test(){
            class B{
            
            }
        }
    }
注意:
    1,只能在当前方法中使用
    2,局部内部类没有访问权限修饰符
    3,局部内部类中不能定义静态成员
    
创建局部内部对象:
    语法:
        内部类类名 内部类对象名 = new 内部类类名(实参列表);
    注意:
        1,只能在当前方法中用
        2,必须在定义局部内部类后使用
        
局部内部类中局部变量,内部类属性,外部类属性重名如何区分?
    局部变量:直接书写,使用就近原则
    内部类属性:this.属性名
    外部类属性:外部类类名.this.属性名

匿名内部类

说明:在类中定义的一个没有类名的内部类
注意:
    1,匿名内部类只能创建一个该类对象
    2,使用位置在值或者实参中
    3,必须有父类或要实现的接口
    4,匿名内部类的使用百分之80伴随接口回调
    
案例:点击按钮
    类
        按钮:Button
            属性:存储该按钮点击后执行的事件
            方法:
                设置点击事件:setOnClick
                点击:click
                    执行点击事件
    接口OnClickListener
        点击事件:onClick
                    
    测试类:
        main
            1,创建按钮对象
            2,创建点击事件的接口对象
                2.1找一个类实现OnClickListener接口
                2.2创建2.1中的类对象
                2.3将2.2中的对象转换为接口对象
            3,使用按钮对象调用设置点击事件
            4,使用按钮对象调用点击方法,模拟用户点击
            
优点:
    1,节省一个类名
    2,方便代码书写
    
缺点:
    导致代码结果混乱,难以阅读
语法:
    new 父类/接口(){
        重写的方法
    }
使用场景:
    1,获取一个接口或抽象类对象
    2,调用方法时,参数需要一个接口对象或抽象类的对象

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值