前言:
如果在类中定义一个类,那么就把在类中定义的类称为内部类,例如发动机安装在汽车内部,如果把汽车定义成汽车类,发动机定义成发动机类,那么发动机类就是一个内部类。
一、为何要使用内部类
- 内部类提供了更良好的封装性,只有外部类才能访问内部类的
- 内部类不受外部类影响独立继承接口(无论外部类是否实现某个接口)
- 外部类不能直接访问内部类属性或者方法,但内部类可以访问外部类的属性或者方法(包括private)方法
内部类示例:
class Text1{ //外部类 public void meth1(){ //外部成员方法 System.out.println("外部类成员方法"); } class Text2{ //内部类 public void nei_meth(){ System.out.println("内部类成员方法"); } } }
二、外部类与内部类的联系
外部类不能直接调用内部类的属性或者方法,如下所示:
public class Waibulei1 { //外部类 int a = 10; //全局变量 public void method(){ System.out.println("外部类方法"); } public static void main(String[] args) { // System.out.println(b); //外部类不能直接访问内部类属性或者方法,会报错 } public class Neibulei{ //创建内部类 int b = 10; public void nei_method(){ System.out.println(a); //直接访问外部类成员变量 } } }
外部类中有私有化的属性或者方法(private)时,内部类方法中可以直接调用,示例:
class Text3{ //外部类
private String name;
private void p_meth(){
System.out.println("私有方法");
}
public static void main(String[] args) {
Text3 tx3 = new Text3(); //创建外部类对象
Text3.Text4 nei_dui = tx3.new Text4(); //创建内部类对象
nei_dui.n_method(); //调用内部类方法
}
class Text4{
public void n_method(){
System.out.println(name); //直接访问外部私有变量
p_meth(); //直接访问外部私有方法
}
}
}
如上述所示,内部类可以在内部类方法中直接调用外部类的私有属性或方法,上述代码运行结果如下:
null
私有方法
注意:内部类对象依赖于外部类对象,如下面这两行代码:
Text3 tx3 = new Text3(); //创建外部类对象 Text3.Text4 nei_dui = tx3.new Text4(); //创建内部类对象
除非已经存在一个外部类对象,否则类中不会出现内部类对象。
三、如何创建内部类对象
内部类对象既可以在外部类中创建,也可以在内部类中创建
第一种: 外部类 外部类对象名 = new 外部类();
外部类.内部类 对象名 = 外部类对象名.new 内部类();
第二种:内部类 对象名 = new 外部类().new 内部类();
四、内部类的分类
内部类所有成员可以分为:成员内部类,局部内部类,匿名内部类,静态内部类。
如需了解内部类的分类,请前往下一篇文章,内部类的分类。