Java-内部类

首先内部类是指在一个类的内部定义的一个类,需要注意的是, 当成员内部类拥有和外部类同名的成员变量或这方法时, 默认情况下访问的是内部类的成员, 如要访问外部类的同名成员, 需要使用以下形式:外部类.this.成员变量/方法。

创建的时候:内部类  引用名  =new 外部类().new 内部类()

包括以下几种内部类:

静态内部类

声明时前面加了static。因为是静态的,因此不需要外部类实例化即可使用。可以访问外部类的静态成员和静态方法。但是于此同时,静态内部类中也无法访问外部类的非静态成员。

外部创建该静态类时可以如下创建:Main.Inner mi = new Main Inner();即new 外部类.静态内部类();

成员内部类(普通内部类、非静态内部类)

成员内部类位于外部类内部,成员内部类可以无条件访问外部类的所有成员属性和成员方法,本身不可以有静态属性

内部类是依附外部类而存在的, 也就是说要创建成员内部类的对象,前提是创建一个外部类的对象,创建成员内部类的方式如下:new Main().new Inner();

局部内部类(方法内部类)

局部内部类是定义在一个方法或作用域中的类,它的访问权限仅限于方法内或作用域内。不可以被访问修饰符和static修饰。只能访问final变量和final形参。

指定义在一个代码块内的类。不能有访问修饰符(即public pretected private final等等),因为它不能被外面访问。但是可以访问当前代码块的常量,以及此外围类的所有成员。

 匿名内部类(这个类没有姓名)

匿名类指的是在声明一个类的同时实例化它,使代码更加简洁精练。最常见的一种形式莫过于在方法参数中新建一个接口对象 / 类对象,并且实现这个接口声明 / 类中原有的方法了:

首先在类内部定义一个接口。(没有构造器,没有静态资源),不可以被访问修饰符和static修饰:

然后实现匿名的内部类

 

两种使用匿名内部类的方法:

1、直接 new 一个接口,并实现这个接口声明的方法,在这个过程其实会创建一个匿名内部类实现这个接口,并重写接口声明的方法。

2、new 一个已经存在的类 / 抽象类,并且选择性的实现这个类中的一个或者多个非 final 的方法,这个过程会创建一个匿名内部类对象继承对应的类 / 抽象类,并且重写对应的方法。

 

同样的,在匿名内部类中可以使用外部类的属性(因为内部类的地位和类的属性和方法的地位一样),但是外部类却不能使用匿名内部类中定义的属性,因为是匿名内部类,因此在外部类中无法获取这个类的类名,也就无法得到属性信息。此外,可以使用外部的局部变量,但是必须必须修饰为final(在jdk8中,已经不需要强制修饰成final了,如果没有写final,不会报错,因为编译器偷偷的帮你加上了看不见的final ),之所以加final是因为在匿名内部类里面的变量和外面的实际上不是一个,在里面修改了影响不了外面,所以系统要final来提示你这一点。综上,不加final可以用,但是修改不了。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值