目录
什么是内部类?
在Java中,可以将一个类定义到另一个类中,前者被称为内部类,后者被称为外部类。
内部类可以分为实例内部类、静态内部类、局部内部类、匿名内部类。
一.实例内部类
实例内部类是指没有static修饰的内部类,它可以被public等访问控制关键字所修饰,下面是一个实例内部类的例子:
class OuterClass {
public int date1 = 1;
public int date2 = 2;
public static int date3 = 3;
public void func() {
System.out.println("OuterClass::func()");
InnerClass innerClass = new InnerClass();
innerClass.func();
}
//实例内部类
//实例内部类当中不能有静态成员变量 如果非要定义 那只能是用 static final 来修饰的
class InnerClass {
public int date1 = 1111;
public int date4 = 4;
//static 代表它只有一份 final代表它是常量
//public static int date2; //error
//加上final
public static final int date5 = 5;
public void func() {
//final是常量
final int SIZE = 10;//定义常量 一般用大写的
//SIZE = 20; //一旦初始化就不能进行修改
System.out.println("InnerClass::func()");
System.out.println(OuterClass.this.date1);
System.out.println(date1);
System.out.println(date2);
System.out.println(date3);
System.out.println(date4);
System.out.println(date5);
}
}
}
public class Test {
public static void main(String[] args) {
OuterClass outerClass = new OuterClass();
//实例内部类的创建
OuterClass.InnerClass innerClass = outerClass.new InnerClass();
innerClass.func();
}
}
在例子中OuterClass是外部类,InnerClass是内部类
里面有一些知识点总结如下:
1.内部类的成员变量可以与外部类的成员变量的名称相同,但是在内部类调用这个名字时,根据就近原则 调用的是内部类的成员 而想要调用外部类的成员可以用 类名.this.名字 来调用。
2.创建内部类对象首先要创建外部类对象,具体方法是:
外部类类名.内部类类名 对象名 = 外部类对象.new 内部类类名();
3.实例内部类的成员不可以是静态成员 但是用 static final 修饰的可以。
二.静态内部类
静态内部类就是被static修饰的内部类
下面是实例:
class OuterClass2 {
public int date1 = 1;
int date2 = 2;
public static int date3 = 3;
public void func() {
System.out.println("OuterClass2::func()");
}
/**
* 静态内部类
* <p>
* 静态内部类里可以创建静态变量
* 但是不能访问外部类的非静态成员变量
*/
public static class InnerClass2 {
public int date4 = 4;
public static int date5 = 5;
public final int date6 = 6;
public void func() {
OuterClass2 outerClass2 = new OuterClass2();
System.out.println(outerClass2.date1);
//System.out.println(date2); error
System.out.println(date3);
System.out.println(date4);
System.out.println(date5);
System.out.println(date6);
}
}
}
public class Test2 {
public static void main(String[] args) {
//静态内部类的创建
OuterClass2.InnerClass2 innerClass2 = new OuterClass2.InnerClass2();
}
}
例子中OuterClass2是外部类,InnerClass2是内部类
知识点总结如下:
1.静态内部类只能访问外部类的静态成员,若要访问其他成员则需要在其内部创建外部类对象。
2.静态内部类对象的创建:
外部类类名.内部类类名 对象名 = new 外部类类名.内部类类名();
3.静态内部类可以创建静态成员变量。
三.局部内部类
局部内部类是在定义在方法体内部的类,且不能被static、public等修饰词修饰,并且该类只能在方法体内部使用,很少使用(基本用不到)。
实例如下:
public class Test3 {
public static void func() {
int date1 = 10;
class Fun {
int date1 = 20;
int date2 = 30;
}
Fun fun = new Fun();
System.out.println(date1);
System.out.println(fun.date1);
System.out.println(fun.date2);
}
public static void main(String[] args) {
func();
}
}
输出为10 20 30
和普通的类区别不大,只是范围很受限。