内部类的概念:
在一个类的内部嵌套定义的类称为内部类。
内部类的特点:
(1)它的类名在定义它的类或程序段中或在表达式内部可以匿名使用。
(2)外部使用它时必须给出类的全名。
(3)内部类的类名不允许与它包含的类名相同。
(4)内部类可以使用它所在类的静态成员变量和实例成员变量,
也可以使用它所在类的方法中的局部变量。
(5)内部类不仅可以用abstract修饰定义为抽象类,
也可用private或protected定义,
同时还要注意,内部类可作为其他类的成员,
而且可访问它所在类的成员,除static内部类外,不能在类中声明static成员。
实列详解:
public class OutClassTest {//外部类
int age;
int out1=1;//外部类 非静态变量(类变量)
static int out2=1;//外部类 静态变量(成员变量)
void out(){//外部类 非静态方法
System.out.println("非静态");
}
static void outstatic(){//外部类 静态方法
System.out.println("静态");
}
public class InnerClass{//非静态内部类 不能有静态成员变量
int eat =2;
// static int sleep = 3;
void InnerClass(){//非静态内部类方法
System.out.println(eat);
OutClassTest outClassTest =new OutClassTest();
System.out.println("InnerClass!");
System.out.println(outClassTest.age);//非静态内部类可以访问外部类所有属性
System.out.println(out2);//访问外部类 非静态变量(类变量)
System.out.println(out1);//访问 外部类 静态变量(成员变量)
out();//非静态内部类能够访问外部类的非静态成员
outstatic();//非静态内部类能够访问外部类的静态成员
}
// static void inner(){} static int i=1; 非静态内部类不能有静态成员(方法、属性)
}
public static class InnerstaticClass{//静态内部类 有静态成员变量 实例成员变量(非静态成员变量)
int eat =2;
static int sleep =3;
void InnerstaticClass(){
System.out.println("InnerstaticClass");
// System.out.println(out1);//
// out();
System.out.println(out2);// 静态内部类只能够访问外部类的静态成员
outstatic();// 静态内部类只能够访问外部类的静态成员
}
static void innerstatic(){}static int i=1;//静态内部类能有静态成员(方法、属性)
void i(){}//静态内部类能有非静态成员(方法、属性)
int a =2;
}
public static void main(String args[]){
// OutClassTest.InnerClass innerClass = new OutClassTest().new InnerClass();
//定义非静态成员内部类对象的语法是:外部类名.内部类名 变量名 = new 外部类名().new 内部类名();
InnerstaticClass innerstaticClass =new InnerstaticClass();
/*new OutClassTest.InnerstaticClass();*/
//定义静态成越内部类对象的语法 :内部类名 对象名 = new 内部类();
}
}
注:仅个人见解,如有不对之处,望指出,定加以改正。