明确:内部类=内置类=嵌套类(由于翻译的问题造成)
1、定义:
就是将一个类定义在另一个类的里面,里面的那个类就称为内部类。
2、访问特点
(1)内部类可以直接访问外部类中的数据,包括私有成员。
(2)而外部类要访问内部类中的成员必须建立内部类的对象。
3、编译生成的文件名
外部类名$内部类名.class
其中名字含有所属关系
4、为什么要使用内部类呢?
可以使访问变量更加简单。
eg1:
(1)
```
class outer
{
private int a=3;
}
class inter
{
void show()
{
System.out.println("show run..."+a);
}
}
class outer
{
private int a=3;
class inter
{
void show()
{
System.out.println("show run..."+a);
}
}
}
(1)中的两个对象,如果inter想要访问outer中的a,必须通过建立实例化对象进行访问。而对于(2)中的inter则不需如此繁琐,可以直接访问,因为inter是outer中的一个部分。
eg2:(有点不恰当,纯属娱乐)
孙悟空向铁扇公主借扇子——飞到肚子里和在肚子外,肚子外没借到,但是肚子里就可以借到了。
5、一般用于对类的设计
分析事物时,发现该事物描述中还有事物,而且这个事物还在访问被描述事物的内容,这时就可以使用内部类了。
eg:身体
心脏设计在身体内,因为心脏要访问身体内部的很多部分,所以直接设计在身体里面。
6、内部类的修饰符
(1)直接访问外部类中的内部类的成员——格式:外部类名.内部类名=new 外部类对象.内部类对象();
eg: outer.inter=new outer().new.inter();
(2)当内部类是一个静态类时,相当于一个外部类,应为outer加载时,inter就加载了。
eg:outer.inter i=new outer.inter();//此时直接调用即可,不用在new inter
i.show();
(3)当内部类是静态时,成员也是静态时,(如果内部类定义了静态成员,该内部类也必须是静态的)
eg: outer.inter.show();
7、细节辨析
(1)
class outer
{
int num=3;
class inter
{
int num=4;
void show()
{
int num=5;
System.out.println("num="+num);
}
void show1()
{
new inter().show();
}
}
}
public class innerClassDemo {
public static void main(String[] args)
{
new outer().show1();
}
}
输出:5
(2)
class outer
{
int num=3;
class inter
{
int num=4;
void show()
{
int num=5;
System.out.println("num=“+this.num);
}
void show1()
{
new inter().show();
}
}
}
public class innerClassDemo {
public static void main(String[] args)
{
new outer().show1();
}
}
输出:4
(3)
class outer
{
int num=3;
class inter
{
int num=4;
void show()
{
int num=5;
System.out.println("num=“+outer.this.num);
}
void show1()
{
new inter().show();
}
}
}
public class innerClassDemo {
public static void main(String[] args)
{
new outer().show1();
}
}
输出:3