简述java内部类

首先我们考虑为什么使用内部类:
使用内部类最大的特点是:每个内部类都能独立的继承一个(接口的)实现,无论外部类是否继承了这个(接口)实现,都堆内部类没有影响。
它能非常好的解决多继承的问题,使用内部类还能够带给我其他特性
(1)提供更好的封装性,除了外围类其他类都不能访问。
(2)内部类可以使用多个实例,每个实例都有自己的状态信息,并且与外围对象的信息相互独立
(3)单个外围类中,可以让多个内部类以不同的方式实现一个接口或者继承同一个类。
内部类:成员内部类,静态内部类,局部内部类,匿名内部类
成员内部类: 他的主要作用就是访问外部类数据

  1. inner类定义在outer类内部,相当于outer类的一个成员变量的位置,inner类可以使用任意访问你控制符。
  2. Inner类的方法可以直接访问outer类中数据,并且不受访问控制符的影响。(因为普通的内部类对象隐含地保存了一个引用,指向创建它的外围类对象,通过这个引用直接找到外围类的数据。)
  3. 定义了成员内部类后,必须使用外部类对象来创建内部类对象,而不能直接去 new 一个内部类对象,即:内部类 对象名 = 外部类对象.new 内部类( );
  4. 编译完后会生成两个.class文件:outer.class,outer$innerclass{};
  5. 成员内部类不能存在static方法和变量,可以定义常量(非静态内部类要依赖外部类实例,具体详细原因:https://blog.youkuaiyun.com/qq_40673345/article/details/78941754
    非static的内部类不是自动跟随主类加载的,而是被实例化的时候才会加载,而static的语义,就是主类能直接通过内部类名来访问内部类中的static方法,而非static的内部类又是不会自动加载的,所以这时候内部类也要static,否则会前后冲突。

注意:1.外部类不能直接使用内部类的成员和方法,可以先创建内部类对象,然后通过内部类的对象访问成员和方法。
2.如果外部类和内部类有相同的变量和方法,内部类默认访问自己的成员和方法,但可以用this访问外部的同名成员和方法。

静态内部类 :static修饰的内部类 https://blog.youkuaiyun.com/qq_26024867/article/details/82527849

  1. 嵌套类的对象,并不需要其外围类的对象。
  2. 不能从嵌套类的对象中访问非静态的外围类对象,但可以通过new 外部类().成员方法的方式访问。
  3. 如果外部类的静态成员和内部类的静态成员名称相同,可以通过类名.成员名访问外部类的静态成员。
  4. 创建静态内部类对象时,不需要外类对象,可以直接创建。

方法内部类: 访问仅限方法内部或作用域内部

1.方法定义局部内部类同方法定义局部变量一样,不能使用private、protected、public等访问修饰说明符修饰,也不能使用static修饰,但可以使用final和 abstract修饰
2.方法中的内部类可以访问外部类成员。对于方法的参数和局部变量,必须有final修饰才可以访问。https://blog.youkuaiyun.com/Rebirth_Love/article/details/80427891
3.static方法中定义的内部类可以访问外部类定义的static成员

匿名内部类: 匿名内部类是直接使用new来生成一个对象的引用,https://www.jianshu.com/p/17fd23694f57
对于匿名内部类的使用它是存在一个缺陷的,就是它仅能被使用一次,创建匿名内部类时它会立即创建一个该类的实例,该类的定义会立即消失,所以匿名内部类是不能够被重复使用。

在使用匿名内部类的过程中,我们需要注意如下几点:1、使用匿名内部类时,我们必须是继承一个类或者实现一个接口,但是两者不可兼得,同时也只能继承一个类或者实现一个接口。2、匿名内部类中是不能定义构造函数的。3、匿名内部类中不能存在任何的静态成员变量和静态方法。4、匿名内部类为局部内部类,所以局部内部类的所有限制同样对匿名内部类生效。5、匿名内部类不能是抽象的,它必须要实现继承的类或者实现的接口的所有抽象方法。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值