内部类:指的是一个类的定义放在另一个类的内部。内部类作为外部类的一个成员,并且依附于外部类而存在的。
内部类仍是一个独立的额的类,每个内部类都能独立的继承自一个(接口)的实现,所以无论外围类是否已经集成了某个接口的实现,对于内部类都没有影响。
内部类分为4种:
成员内部类:在一个包含类中定义的不使用静态修饰符的类型
与成员变量、方法同一个层次
可以访问包含类所有的成员
在包含类中中创建成员内部类实例的语法:
this.new Innerclass();
在包含类外创建成员内部类实例的语法
(new Outerclass()).new Innerclass();
方法内部类:定义在方法体中的类
方法内部类只能在定义该内部类的方法内实例化,不可以在此方法外对其实例化
最少使用的内部类形式
如同本地变量的定义,不允许有访问修饰符
只能访问用final修饰的本地变量
匿名内部类:没有名字的内部类
只用到类的一个实例
类在定义后马上用到
类非常小(OLD SUN推荐是在4行代码以下)
给类命名并不会导致你的代码更容易被理解
静态内部类:不能与包含类同名
编译后生成一个完全独立的类文件
只能访问包含类所有静态变量、静态方法
要创建嵌套类的对象,并不需要其外围类的对象
创建静态内部类实例的语法:
Outer.Inner inner = new Outer.Inner();
//Outer.Inner2 inner2 = new Outer.Inner2();
Outer outer = new Outer();
outer.setName("tom");
System.out.println(outer.innerClass());
//要获得一个内部类,必须先创建外部类
/*Outer outer = new Outer();
Outer.Inner inner = outer.getInnerClass();
inner.getInfo();
Outer.Inner inner2 = outer.new Inner();*/
}
}
private String name;
public String innerClass(){
class Inner{
public String getInfo(){
return"hello:"+name;
}
}
Inner inner =new Inner();
return inner.getInfo();
}
public String getName(){
return name;
}
public void setName(String name){
this.name=name;
}
public String getInfo(){
return name;
}
//成员内部类
class Inner{
private String str;
public String getInfo(){
return str +name;
}
//静态内部类
/*static class Inner2{
public void pribtInfo(){
// System.out.println(name);
}
}*/
}
}