定义在一个类内部的类叫内部类,包含内部类的类称为外部类。
内部类可以访问外部类的所有方法与属性,但static的内部类只能访问外部类的静态属性与方法。
内部类可以声明为static,也可以声明为非static,如果声明为非static那么内部类的方法不能声明为static。
内部类的出现是为了变相的实现多继承,从而使某些编码更简洁。
内部类的实例对象必然属于外部类,内部类可以访问外部类的任一个成员字段和成员方法。
例如:
class TestOutClass{
private static String strName = "huang3";
private int iNum;
private float fNum;
public TestOutClass(int iNum, float fNum){
this.iNum = iNum;
this.fNum = fNum;
}
class InteriorClass{
//private String inName;
public void print(){
System.out.println(TestOutClass.strName);
System.out.println(TestOutClass.this.iNum);
System.out.println(TestOutClass.this.fNum);
}
}
}
public class Example {
public static void main(String[] args) {
TestOutClass oc = new TestOutClass(2, 8.8f);
TestOutClass.InteriorClass ig = oc.new InteriorClass();
ig.print();
}
}
运行结果:
huang3
2
8.8
为内部类创建带参实例对象时,将内部类和外部类分开单独进行考虑。
例如:
class TestOutClass{
private static String strName = "huang3";
private int iNum;
private float fNum;
public TestOutClass(int iNum, float fNum){
this.iNum = iNum;
this.fNum = fNum;
}
class InteriorClass{
private String inName;
public InteriorClass(String inName){
this.inName = inName;
}
public void InPrint(){
System.out.println("我是皇3");
System.out.println(inName);
}
public void print(){
System.out.println(TestOutClass.strName);
System.out.println(TestOutClass.this.iNum);
System.out.println(TestOutClass.this.fNum);
}
}
}
public class Example {
public static void main(String[] args) {
TestOutClass oc = new TestOutClass(2, 8.8f);
TestOutClass.InteriorClass ig = oc.new InteriorClass("SX");
ig.print();
ig.InPrint();
}
}
运行结果:
huang3
2
8.8
我是皇3
SX
内部类不能与外部类重名。
在创建内部类对象时,必须先创建外部类对象。
总结:JAVA 内部类还有一个作用,那就是实现JAVA的多继承。JAVA本身是不允许多继承的,如果我们想一个类继承多个基类,就可以使用内部类。通过内部类分别继承一个基类,外部类创建内部类的对象,并使用内部类的方法,变相地实现了多继承。