Java中的内部类

如果在一个类中再定义一个类,那么这个在类中被定义的类就叫做内部类。

Java的内部类分为四种

  1. 成员内部类
  2. 局部内部类
  3. 匿名内部类
  4. 静态内部类

成员内部类

package blog.c;

public class Dome1 {

	Dome2 d = new Dome2();// 在外部类实例化内部类对象引用

	public void out() {// 外部方法中调用内部类方法
		d.inDome();
	}

	class Dome2 {// 成员内部类

		Dome2() {// 成员内部类里的构造方法

		}

		public void inDome() {// 内部类成员方法
			System.out.println("成员内部里的成员方法");
		}

		int y = 0;// 内部类成员变量
	}

	public Dome2 doit() {
		y = 10;// 会报错,外部类不可直接访问内部类成员变量
		d.y = 10;
		return new Dome2();
	}

	public static void main(String[] args) {
		// 两种调用内部类的方法
		Dome1 o = new Dome1();
		o.out();
		Dome1.Dome2 m = o.new Dome2();
		m.inDome();

	}

}

内部类的实例一定要绑定在外部类的实例上,内部类的初始化方式与其他类的初始化方式相同,都是使用new关键字。

外部类创建内部类实例与其他类创建对象引用时相同,内部类可以访问他的外部类成员,但内部类成员只可以在内部类范围之内可知,但是可以使用内部类对象引用调用成员变量。

局部内部类

package blog.c;

public class Dome1 {

	public Usecase doit(final String x) {
		class ininDome implements Usecase {// 局部内部类
			public ininDome(String s) {
				s = x;
				System.out.println(s);
			}
		}
		return new ininDome("doit");
	}

	public static void main(String[] args) {
		Dome1 d = new Dome1();
		d.doit("局部内部类");

	}

}

interface Usecase {// 定义一个接口

}

内部类不仅可以在类中定义,也可以在类的局部位置定义,比如在类的方法中定义。

匿名内部类

package blog.c;

public class Dome1 {

	public Dome2 doit() {
		return new Dome2() {// 匿名内部类
			private int i = 10;

			public int Exp() {
				return i;
			}
		};
	}

	public static void main(String[] args) {

	}

}

interface Dome2 {// 定义一个接口

}

在return语句中编写返回值为一个匿名内部类,匿名内部类没有类名,所以实现代码都需要在大括号里进行编写。

匿名内部类编译以后,会产生以“外部类名$序号”为名的.class文件
在这里插入图片描述

静态内部类

package blog.c;

public class Dome1 {

	int x = 10;
	static int y = 10;

	static class inDome2 {// 静态内部类

		public void doit() {
			System.out.println(x);// 报错,静态内部类不可以直接调用外部类的非静态成员变量
			System.out.println(y);// 静态内部类调用外部类的成员变量,必须是静态的
		}

		public static void main(String args[]) {
			System.out.println("静态内部类里的main方法");
		}
	}

}

在内部类前添加修饰符static,这个内部类就变成静态内部类了。一个静态内部类可以声明static成员,但是在非静态内部类中不可以声明静态成员。在静态内部类里可以创建main方法。

注意

  • 如果创建静态内部类的对象,不需要其外部类的对象。
  • 不能从静态内部类的对象中访问非静态外部类的对象。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值