/*
内部类:在A类内部中定义另外一个B类,B类则称作为内部类。
注意: 内部类的class文件的命名是: 外部类$内部类.class . 这样子的命名意义主要是为了区分开目前内部类是属于哪个外部类的。
内部类的类型:
成员内部类:
成员内部类的访问方式:
方式一: 在外部类提供一个方法用于创建内部类的对象,然后进行访问。
方式二:在其他类直接创建内部类的对象。
格式:
外部类.内部类 变量名 = new 外部类().new 内部类();
内部类的好处: 内部类可以直接访问外部类的任何成员。
内部类的应用场景:
我们在描述一类A事物的时候,发现该A事物内部还具备另外一个事物B,而且B事物需要用到
A事物的一些成员数据,那么这时候B事物我们就可以使用内部类来描述。
比如:
class 人{
氧气
血液
class 心脏{
}
}
内部类要注意的事项:
1. 如果外部类与内部类存在着同名的成员时,在内部类中默认是访问内部类的成员(就近原则)。
如果需要指定访问外部类的成员,可以使用 "外部类.this.成员"格式进行指定访问。
2. 如果一个内部类使用了private修饰,那么该内部类就只能在外部类提供 一个方法创建内部类的
对象了,在其他类无法再创建该内部类的对象。
3. 如果内部出现了静态的成员,那么该内部类也必须使用static修饰.
疑问: 为什么内部出现了静态的成员,那么该内部类就必须使用static修饰??
*/
class Outer
{
static int x=4;
static class Inner
{
static int x=3;//如果内部类有静态类型,内部类也要用静态修饰.如果想访问到int=4,注释掉这句,外部类指定的成员变量也要变成静态才能访问.
public void print(){
System.out.println(x);//如果需要访问静态的同名成员变量,改为Outer.x
} //为什么不能Outer.this.x?因为this是非静态变量,静态不能访问.
}
public void show(){
Inner i=new Inner();
i.print();
}
}
class Demo4
{
public static void main(String[] args)
{
Outer o=new Outer();
o.show();// 结果为3 把x或者this.x,改为Outer,x 结果为4
}
}
|