java class in
yaokun123 edited this page Nov 18, 2018
·
3 revisions
将一个类定义在另一个类的里面,对里面那个类就称为内部类(内置类、嵌套类)
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();
}
}