Java 内部类
一、内部类的定义
将一个类定义在另一个类的里面,对里面那个类就称为内部类(内置类、嵌套类)
class Outer{
private int num = 3;
class Inner{//内部类
void show(){
System.out.println("inner show"+num);
}
}
public void method(){
Inner in = new Inner();
in.show();
}
}
class InnerClassDemo{
public static void main(){
}
}
编译成功会生成3个字节码文件
- InnerClassDemo.class
- Outer.class
- Outer$Inner.class
注意:内部类与外部类用$符号链接。
二、内部类的访问特点
1、内部类可以直接访问外部类中的成员,包括私有成员。
那是因为内部类持有外部类的引用,外部类.this
2、而外部类要访问内部类中的成员必须要建立内部类对象。
三、内部类修饰符
内部类定义在一个类的成员位置上,那么内部类就可以用修饰符修饰。
class InnerClassDemo{
public static void main(){
//直接访问外部类中的内部类中的成员
//格式如下:
Outer.Inner in = new Outer().new Inner();
in.show();
}
}
注意:内部类大部分的情况下都是私有化的。
class Outer{
private static int num = 3;
static class Inner{//内部类
void show(){
System.out.println("inner show"+num);
}
}
public void method(){
Inner in = new Inner();
in.show();
}
}
class InnerClassDemo{
public static void main(){
//如果内部类是静态的,相当于一个外部类
Outer.Inner in = new Outer.Inner();//不需要先建立外部对象。
in.show();
}
}
class Outer{
private static int num = 3;
static class Inner{//内部类
static void show(){//如果内部类中定义了静态成员,该内部类也必须是静态的。
System.out.println("inner show"+num);
}
}
public void method(){
Inner in = new Inner();
in.show();
}
}
class InnerClassDemo{
public static void main(){
//如果内部类是静态的,成员是静态的
//就不需要对象了
Outer.Inner.show();
}
}
class Outer{
int num = 3;
class Inner{
int num = 4;
void show(){
int num = 5;
System.out.println(num);//5
System.out.println(this.num);//4
System.out.println(Outer.this.num);//3
}
}
}
四、局部内部类
内部类可以存放在局部位置上
class Outer{
int num = 3;
void method(){
class Inner{
void(){
System.out.println("show ..."+num);//3
}
Inner in = new Inner();
in.show();
}
}
}
class InnerClassDemo{
public static void main(Srring[] args){
new Outer().method();
}
}
访问局部变量
class Outer{
int num = 3;
void method(){
final int x = 9;//注意:此处必须加final关键字
class Inner{
void(){
System.out.println("show ..."+x);//9
}
Inner in = new Inner();
in.show();
}
}
}
class InnerClassDemo{
public static void main(Srring[] args){
new Outer().method();
}
}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论