内部类
什么叫内部类呢?其实顾名思义,就是位于一个类内部的类,除了位置是在一个类的内部,其余的类里面的东西,和外部的一般类没有任何区别。
但是,我们可以从以下几个方面来讨论。
首先是访问规则。
eg:class Outer
{
private int x=3;
class Inner
{
public void show()
{
System.out.println("Inner:"+x);
}
}
public void search()
{
Inner in=new Inner();
in.show();
}
}
public class Demo
{
public static void main(String []args)
{
Outer ou=new Outer();
ou.search();
}
}
这段程序的结果是Inner:3
从这个程序可以看出,内部类可以访问它所在的外部类的成员变量,甚至是私有的变量:当外部类的函数想访问内部类的函数时,需要先建立内部类的对象,再访问那个方法
其次,再从访问的格式来讨论:
1:当内部类定义在外部类的成员位置上时且无任何修饰的关键词时,可以:在外部其他类中直接建立内部类对象
格式:外部类名.内部类名 变量名=外部类对象.内部类对象
eg:Outer.Inner in=new Outer().new Inner();
2:当内部类在成员位置上且被修饰时,比如private,static等。它的访问方式就会不一样。
当被static:内部类就具备static的特性,比如可以直接被类名.调用
eg:Outer.Inner.show();
但是当内部类被static修饰后,只能直接访问外部类中的static成员,出现了访问局限:当内部类中定义了静态成员,该内部类必须是静态的;当外部类中的静态方法访问内部类时,内部类也必须是静态的:当内部类是静态时,不可以访问非静态的成员
3:局部内部类不能被private static等关键字修饰,其次,内部类定义在局部时,如果想访问里面的方法,必须在类建立后建立这个内部类的对象,里面的方法才能被访问:可以直接访问外部内中的成员,但是不可以访问它所在的局部中的成员,只能访问被final修饰的成员
再者,就是我们在什么时候定义内部类呢?就拿我们人来说,我们内部的器官和我们的身体,如果我们先定义了一个人体,再想描述器官的时候,就需要把器官的类定义在人体的类的里面,这样比较符合我们队事物的认知。因为内脏本来就是存在于人体内部的。