内部类就是定义在类(此类就是后文所说的)的内部的类。可以定义在类的方法方法中此时称为局部内部类,也可以定义在方法外,此时就称作内部类。内部类可以直接访问外部类的成员,包括私有的成员。外部类要访问内部类,必须创建内部类的对象。内部类之所以能直接访问外部类中的成员,是因为内部类拥有一个外部类的引用。内部类定义在成员的位置上,而且非私有。则此内部类可以被其他的类建立此类的对象。一般格式为:
Outer.Inner in = new Outer(参数列表).new Inner(参数列表);(具体见demo程序)
class Outer1{
int x = 4;
class Inner1{
int x = 3;
public void m(){
int x = 6;
System.out.println("Inner class " + x);
System.out.println("Inner class " +this.x);
System.out.println("Inner class " + Outer1.this.x);
//System.out.println("Inner class " + Outer1.x);//因为x为非静态的所以不能直接由类名引用
}
}
public void show() {
Inner1in = newInner1();//外部类中要访问内部类必须创建内部类对象
in.m();
}
}
public classInnerClassDemo {
/**
* @param args
*/
public static void main(String[] args) {
Outer1out = newOuter1();
out.show();
Outer1.Inner1oi = newOuter1().newInner1();//在外部类中直接建立内部类对象
oi.m();
System.out.println(oi);
}
}
运行结果:
Inner class 6
Inner class 3
Inner class 4
Inner class 6
Inner class 3
Inner class 4
Outer1$Inner1@61de33
当内部内在成员位置上的时候就可以被成员修饰符修饰,如:private static
当被private修饰时除此内部类自身及其对应的外部类之外的其他类不能再创建此内部类对象。
当被static修饰时,内部类就具备了static的特性,此时内部类只能访问外部类中的静态成员,当内部类不引用外不能的非静态成员时,可以用static来修饰此内部类那么怎样访问static内部类中的静态和非静态成员呢?
nehOuter.Inner().function()
在外部其他类中,如何直接访问static内都类的静态成员呢?
Outer.Inner. function();
注意:当内都类中定义了静态成员,该内都类必须是static的
当外部类中的静态方法访问内部类时,内部类也必须是static的。
class Outer{
static int x = 4;
static class Inner{
int x = 3;
public void m(){
int x = 6;
System.out.println(x);
}
public static void m1(){
System.out.println(Outer.x);
}
}
class Inner2{
int x = 4;
public void m(){
int x = 7;
System.out.println(x);
}
}
public void show() {
Innerin = newInner();
in.m();
}
}
public classInnerClassDemo2 {
/**
* @param args
*/
public static void main(String[] args) {
new Outer().new Inner2().m();//调用非静态内部类中的非静态方法
new Outer.Inner().m();//调用静态内部类中的非静态方法
Outer.Inner.m1();//调用静态内部类中的静态方法
}
}
运行结果:
7
6
4
当描述事物时,事物内部还有事物,该事物用内部类描述,因为内部事物在使用外部事物的内容