java 匿名类实现6_java面对对象(六)--内部类、匿名内部类

内部类

可以在一个类的内部定义另一个类这种类成为内部类或嵌套类,比如:

1 classOuter{2 …3 classInner{4 ….5 }6 }7 class Outer1{} //这个Inner1不是Outer1的内部类,不在Outer1的类体括号内

8 classInnter1{9 ……10 }11 Class Outer2{ //Inner2虽然是在Outer2的方法内,但还是在Outer2的类体括号内,是内部类

12 ……13 public voidtest(){14 classInner2{15 ….16 }17 }18 }

内部类有什么问题和好处:

问题:外部类不使用或不创建外部类对象,就不能直接创建内部类对象

好处:外部类的私有属性,内部类可使用,而且不破坏封装,这也是为什么内部类存在的重要原因

内部类的特性

内部类的特征与变量概念特性很相似

内部类的位置与变量位置相似

变量可分为实例变量(成员变量),局部变量,静态变量

内部类与变量相似,也可分为四种

内部类的分类

静态内部类,成员内部类,局部内部类,匿名内部类

成员内部类

1.使用成员内部类就象使用成员变量一样,在本类的主方法中则直接使用成员内部类,不用加上外部类的名字来访问。但在其他类的主方法中要使用成员内部类则就需要使用外部类.内部类来访问。

2.使用外部类名来访问内部类还因为一个内部类可能有不同的外部类

3.创建一个成员内部类对象必须先创建外部类的对象,因为成员内部类要访问外部类的成员

4.成员内部类可以访问外部类的所有属性

5.成员内部类中不能定义有静态属性

6.当外部类的成员与内部类成员,内部类中局部变量同名时,则使用三种不同方式访问

直接使用变量名则访问局部变量

使用this.变量名则访问内部类的成员

使用外部类名.this.变量名则访问外部类的成员

静态内部类

在成员位置上定义为static的内部类,称为静态内部类

静态内部类类似于静态变量,修饰静态变量的修饰符也可以修饰静态内部类

静态内部类与静态方法,静态属性相似,访问静态方法,静态属性用类名.属性名/方法名访问,但是在本类中可不用类名.来访问。静态内部类也一样,在本类方法中访问则不用加上外部类名来访问,若在其他类的方法中则要加外部类名.内部类名来访问。

静态内部类中只能访问外部类的静态成员和本内部类的成员

静态内部类中不能访问外部类的非静态成员

匿名内部类

1.匿名内部类是一种特殊的局部内部类,局部内部类可以转化为匿名内部类

2.局部内部类要转化为匿名内部类必须具备3个条件

首先是一个局部内部类,也是一个私有的内部类

该局部内部类实现一个接口或继承一个父类

局部内部类只new一次创建一个对象

3.匿名内部类就是无显式地声明某个类名来实现接口,而直接实现接口的方法的类

4.匿名内部类不能定义构造方法,因为匿名内部类是一个特殊局部内部类,它没有类名。

5.匿名内部类可以访问外部类的局部变量,但也要求外部类的局部变量是final型的才能访问

6.匿名内部类可以访问外部类的属性

7.匿名内部类可以在一个类的方法中创建,同样可以在一个类的主方法中实现。

8.当继承的父类中抽象方法与实现的接口中方法同名,同参数列表,同返回类型,则子类只写一个方法实现就可以了

9.当继承的父类中抽象方法与实现的接口中的方法同名,但返回类型不同,则子类就必须写出每个方法,但这样的方法集同名,返回类型不一样则认为是同一方法,又不能构成重载,则就会编译出错

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值