JAVA 中的内部类详解
内部类包含两种:静态内部类 和 非静态内部类
一. 静态内部类:
特点:
①能访问外部类OuterClass的静态成员(属性和方法),不能直接访问外部类OuterClass的实例成员(属性和方法)。
②静态内部类StaticNestedClass允许定义静态成员(属性和方法)和 实例成员(属性和方法)
静态内部类使用:
创建一个静态内部类的对象
二. 非静态内部类
特点:
①能访问外部类OuterClass的静态成员,静态方法 和 实例成员,实例方法。
②只能定义实例成员(属性和方法) 不能定义静态成员(属性和方法)
非静态内部类的使用:
必须先创建一个外部类的实例,然后才能创建非静态内部类。
两种特殊的非静态内部类:局部类 和 匿名类
在方法中声明类,这些类称为“局部类”
例子: 验证两个电话的合法性。定义了一个局部类PhoneNumber。
局部类只可以访问外部类的静态成员(属性和方法) , 局部类不能定义静态成员(属性和方法) ,除特殊的公共静态的常量。如 public static final String = "123"
结果如下:
在方法中声明一个没有名字的类, 这些类称为“匿名类”
匿名类是一个表达式,类似于调用构造方法,并伴随着类的代码块的定义。
例子: 使用匿名内部类初始化局部变量frenchGreeting和spanishGreeting
三. 重影:
例子:
当定义变量的时候,有可能你的变量名在当前外部类或内部类或方法中重复,以下例子帮你正确使用某个范围内的变量。
结果如下:
当你访问FirstLevel实例变量x,则使用 this.x 。
当你想要访问更大范围的变量x, 则使用ShadowTest.this.x 代表使用ShadowTest实例的变量x 。
评论