本篇博客将讲解Java中的内部类。
文章目录
- 内部类
- 本地内部类
- 实例内部类
- 静态内部类
- 匿名内部类
- 结尾
内部类
本地内部类
本地内部类是定义在方法当中的类。例如:
public class Test {
public void fun() {
class Test {
public int a;
}
}
}
本地内部类只能在当前方法中使用。
实例内部类
在实例内部类当中不能定义一个静态的成员变量,但可以定义静态常量。例如:
class OuterClass {
public int data1 = 1;
private int data2 = 2;
public static int data3 = 3;
class InnerClass {
public int data4 = 4;
private int data5 = 5;
public static final int data6 = 6;
public InnerClass() {
System.out.println("不带参数的构造方法");
}
}
public void fun() {
System.out.println("++++++++++++");
}
}
那么如何去实例化实例内部类呢?
实例化:外部类名.内部类名 变量 = 外部类对象的引用.new 内部类();
OuterClass outClass = new OuterClass();
OuterClass.InnerClass innerClass = outerClass.new InnerClass();
这样便可以实例化内部类了。
在实例内部类中如果包含了与外部类同名的成员变量,那么则需调用外部类类名进行访问,例如:
class OuterClass {
public int data1 = 1;
private int data2 = 2;
public static int data3 = 3;
class InnerClass {
public int data1 = 999999999;
public int data4 = 4;
private int data5 = 5;
public static final int data6 = 6;
public InnerClass() {
System.out.println("不带参数的构造方法");
}
public void test() {
System.out.println(OuterClass.this.data1);
System.out.println(this.data1);
}
}
public void fun() {
System.out.println("++++++++++++");
}
}
public class TestDemo {
public static void main(String[] args) {
OuterClass outerClass = new OuterClass();
OuterClass.InnerClass innerClass = outerClass.new InnerClass();
innerClass.test();
}
}
执行结果为:
静态内部类
静态内部类是在实例内部类前面加上static即可,例如:
class OuterClass2 {
public int data1 = 1;
private int data2 = 2;
public static int data3 = 3;
static class InnerClass {
public int data4 = 4;
private int data5 = 5;
public static int data6 = 6;
public void test() {
System.out.println("=========");
}
}
}
实例化静态内部类,例如:
OuterClass2.InnerClass innerClass = new OuterClass2.InnerClass();
访问外部类的成员变量,例如:
class OuterClass2 {
public int data1 = 1;
private int data2 = 2;
public static int data3 = 3;
static class InnerClass {
public int data4 = 4;
private int data5 = 5;
public static int data6 = 6;
public void test() {
OuterClass2 outerClass2 = new OuterClass2();
System.out.println(outerClass2.data1);
System.out.println("=========");
}
}
}
public class Test {
public static void main(String[] args) {
OuterClass2.InnerClass innerClass = new OuterClass2.InnerClass();
innerClass.test();
}
}
执行结果为:
匿名内部类
匿名内部类在前面的博客中也已经出现过,这里就稍微介绍一下。
class A {
public void test() {
System.out.println("===========");
}
}
public class TestDemo {
public static void main(String[] args) {
new A() {
}.test();
}
}
执行结果为:
当然,也可以重新匿名内部类的方法,例如:
class A {
public void test() {
System.out.println("===========");
}
}
public class TestDemo {
public static void main(String[] args) {
new A() {
@Override
public void test() {
System.out.println("++++++++++++++++++++++++");
}
}.test();
}
}
执行结果为:
结尾
本篇博客到此结束。
上一篇博客:Java学习苦旅(二十三)——二叉搜索树
下一篇博客:Java学习苦旅(二十五)——哈希表