Java内部类的定义和使用(附带实例)
内部类是被定义在另一个类内部的类,可以分为成员内部类、局部内部类等类型。
语法结构如下:
【实例】创建类ExtClassDemo,实现对内部类的创建,代码如下:
在外部类中定义的成员和内部类的成员可以有相同的名称。
成员内部类可以访问外部类的所有成员,包括私有成员。创建成员内部类对象,需要先有外部类对象,可以通过“外部类对象.内部类对象”的方式来创建。
语法结构如下:
【实例】创建类 ExtClassDemo,实现对内部类成员的访问,代码如下:
局部内部类可以访问外部类的成员及方法局部变量,局部变量只有被声明为 final 才能被局部内部类访问。
【实例】创建类 ExtClassDemo02,实现对局部内部类的定义和访问,代码如下:
语法结构如下:
访问修饰符 class 外部类的名称 { // 定义成员变量 // 定义成员方法 访问修饰符 class 内部类名称 { // 定义内部类的成员变量 // 定义内部类的成员方法 } }
【实例】创建类ExtClassDemo,实现对内部类的创建,代码如下:
public class ExtClassDemo { // 定义成员变量 int a = 10; // 定义成员方法 public void testDemo() { System.out.println("外部类的方法"); } // 定义内部类 public class InnerClassDemo { // 定义内部类的成员变量 int b = 20; public void testDemo() { System.out.println("内部类的方法"); } } }在上述代码中,ExtClassDemo 类是外部类,InnerClassDemo 类是内部类,变量 a 是外部类的成员变量,变量 b 是内部类的成员变量。
在外部类中定义的成员和内部类的成员可以有相同的名称。
Java成员内部类
成员内部类定义在外部类的成员位置,就像外部类的成员变量和成员方法一样。成员内部类可以访问外部类的所有成员,包括私有成员。创建成员内部类对象,需要先有外部类对象,可以通过“外部类对象.内部类对象”的方式来创建。
语法结构如下:
外部类 外部类对象名称 = new 外部类(); 外部类.内部类 内部类对象 = 外部类对象名称.new 内部类();
【实例】创建类 ExtClassDemo,实现对内部类成员的访问,代码如下:
public class ExtClassDemo { // 定义成员变量 int a = 10; private int c = 30; // 定义成员方法 public void testDemo() { System.out.println("外部类的方法"); } // 定义内部类 public class InnerClassDemo { // 定义内部类的成员变量 int b = 20; public void testDemo() { System.out.println(a); // 访问外部类成员变量 System.out.println(c); // 访问外部类私有成员变量 ExtClassDemo.this.testDemo(); // 调用外部类方法 System.out.println("内部类的方法"); } } } public class ExtClassDemoTest { public static void main(String[] args) { ExtClassDemo extClassDemo = new ExtClassDemo(); ExtClassDemo.InnerClassDemo innerClassDemo = extClassDemo.new InnerClassDemo(); // 调用内部类的成员变量 System.out.println(innerClassDemo.b); // 调用内部类的方法 innerClassDemo.testDemo(); } }程序运行结果为:
20
10
外部类的方法
内部类的方法
Java局部内部类
局部内部类被定义在外部类的方法内部。局部内部类只能在定义它的方法内部被访问。局部内部类可以访问外部类的成员及方法局部变量,局部变量只有被声明为 final 才能被局部内部类访问。
【实例】创建类 ExtClassDemo02,实现对局部内部类的定义和访问,代码如下:
public class ExtClassDemo02 { int extB = 10; // 定义外部类的成员方法 public void testDemo() { // 在方法中定义局部内部类 class LocalInnerDemo { int a = 10; public void test() { // 访问外部类的成员 System.out.println(extB); System.out.println("局部内部类的方法"); } } // 创建局部内部类对象 LocalInnerDemo localInnerDemo = new LocalInnerDemo(); localInnerDemo.test(); localInnerDemo.a = 20; System.out.println(localInnerDemo.a); } }在上述代码中,LocalInnerDemo 是在 testDemo 方法内部定义的局部内部类。