**
1.什么是java中的内部类
**
内部类(inner class)就是定义在一个类里边的类,对应的,包含内部类的类被称为外部类。
内部类的作用:
1. 内部类提供了更好的封装,可以把内部类隐藏在外部类之内,不允许同一个包中的其他类访问该类;
2. 内部类的方法可以直接访问外部类的所有数据,包括私有的数据;
3. 内部类所实现的功能使用外部类同样可以实现,只是有时候使用内部类更方便;
内部类的分类:
* 成员内部类
* 静态内部类
* 方法内部类
* 匿名内部类
示例:
//外部类inner
public class inner{
//内部类
public class hello{
//内部类方法
public void show() {
System.out.println("内部类的方法");
}
}
public static void main(String[] args) {
inner inn = new inner();
hello h = inn.new hello();
h.show();
}
}
**
2.java中的成员内部类
**
成员内部类(普通内部类):
//外部类inner
public class inner{
//外部类的私有属性
private int a = 10;
//内部类
public class hello{
int b = 20;
//内部类方法
public void show() {
System.out.println("访问外部类a"+a);
System.out.println("访问内部类b"+b);
}
}
public static void main(String[] args) {
//创建外部类对象
inner i = new inner();
//创建内部类对象
hello h = i.new hello();
//调用内部类方法show
h.show();
}
}
注意:
1. 外部类不能直接使用内部类的属性和方法,,可先创建内部类的对象,然后通过内部类的对象来访问其成员变量和方法
2. 如果外部类和内部类具有相同的成员变量或方法,内部类默认访问自己的成员变量和方法,如果要访问外部类的成员变量,可以使用this关键字;(类名.this.成员变量名)
**
3.java中的静态内部类
**
静态内部类是static修饰的内部类,这种内部类的特点是:
1. 静态内部类不能直接访问外部类的非静态成员,但可以通过 new 外部类().成员 的方法访问;
2. 如果外部静态成员与内部类的成员名称相同,可以通过 “类名.静态成员” 来访问外部类的静态成员;如果外部类的静态成员与内部类的
成员名不一样,就可以通过 成员名 直接调用外部类的静态成员
3. 创建静态内部类的对象时,不需要外部类的对象,可以直接创建 内部类 对象名 = new 内部类();
示例:
//外部类
public class inner{
//外部类私有成员
private int a = 10;
//外部类静态成员
static int b = 20;
//内部类
public static class hello{
//内部类成员
int b = 30;
//内部类方法
public void show() {
System.out.println("外部静态成员"+inner.b);
System.out.println("外部私有成员"+new inner().a);
System.out.println("内部类成员:"+b);
}
}
public static void main(String[] args) {
//创建静态内部类对象
hello h = new hello();
//调用内部类方法
h.show();
}
}