时间:2017年7月18日
摘要:内部类,局部内部类,匿名类,静态内部类
1)除匿名类外其他的类都可以有构造函数。
2)内部类可以访问外部类的对象。
3)局部内部类不能用public、private等修饰。
4)局部内部类可以访问外部类对象,但是不能访问局部非final型的属性(可以引用)。
5)匿名内部类不能有构造函数,构造参数必须传给超类,在实现接口的时候不能有任何构造函数。
6)静态内部类不能引用外部类对象(除去静态变量,或方法)
7)只有内部类可以被定义为 static。
8)接口中的内部类自动成为 static 和 public类。
补充:static修饰的类或方法,所访问的变量或方法必须是static。
//内部类相关知识点的测试代码
public class OuterClass{
static int i = 2;
String name = "tom";
OuterClass(){
inClass test = new inClass();
test.display();
//partClass part = new partClass(); 不可以
}
public static void main(String [] args){
//inClass test = new inClass();
//test.display(); 不可以
//System.out.println(this.name); 不可以
//System.out.println(this.i); 不可以
//System.out.println(i); 可以
OuterClass ourter = new OuterClass();
ourter.test(i);
i++;
ourter.test(i);
OuterClass.inStaticClass instatic = new OuterClass.inStaticClass();
instatic.display();
}
public void test(final int in){ //局部内部类,比内部类作用范围更小
int unfinal = 10;
class partClass{//不能用public private 等修饰 局部内部类也可以由构造函数
int h ;
public partClass(){
h = 10;
}
public void display(){
System.out.println(in);
System.out.println(h);
//in++; 不可以
//unfinal++; 不可以对局部非final变量进行访问
System.out.println(unfinal); //可以对局部变量进行输出
}
}
partClass part = new partClass();
part.display();
}
public class inClass{ //内部类,内部类可以有构造函数
public inClass(){
i = 30;
name = "lucy";
}
public void display(){
System.out.println(name + i);
i = i+10;
}
}
public static class inStaticClass{ //静态内部类,与普通内部类的不同在于不引用外部类的对象
public inStaticClass(){
// System.out.println(name); 不可以
System.out.println(i);
}
public void display(){
//System.out.println(name); 不可以
System.out.println(i);
}
}
/*
补充:匿名内部类不能有构造函数,构造参数必须传给超类,在实现接口的时候不能有任何构造函数
*/
}