内部类

Inner Class

定义

某个类定义在另一个类的内部,表示为:

class Outer {
	class Inner {
	}
}

例子

public class Demo {
	public static void main(String[] args) {
		Outer outer = new Outer("Hetongxue");		//实例化Outer
		Outer.Inner inner = outer.new Inner();		//实例化Inner
	}
}
class Outer {
	private String name;
	Outer(String name){
		this.name = name;
		}
		class Inner {
			void hello() {
				System.out.println("Hello,"+ Outer.this.name);
				}
		}
}

Anonymous Class

定义

这也是一种定义Inner Class的方法,和上面不一样,不用Outer Class中定义这个class,而是在方法内部进行定义,表示为:

class Outer {
	void asyncHello {
	}
}

例子

public class Demo {
	public static void main(String [] args){
		Outer outer = new Outer("Nested");	//	只用实例化Outer
		outer.asynHello();
		}
}
class Outer {
	private String name;
	Outer(String name){
		this.name = name;
	}
	void asynHello() {
		Runnable r = new Runnnable() {	 
		//Runnable本身是接口,这里定义了实现Runnable接口的匿名类
			@Override
			public void run(){
				System.out.println("Hello,"+ Outer.this.name);
			}
		};
		new Thread(r).start();	//线程池
	}
}

Static Class

定义

用static修饰,称为静态内部类(Static Nested Class)。

class Outer{
	static class StaticNested {
		}
}

例子

public class Demo{
    public static void main(String[] args) {
	Outer.StaticNested sn = new Outer.StaticNested()};	//不用实例化outer,只用实例化StaticNested
	sn.hello();
	}
}
class Outer {
	private static String NAME = "OUTER";
	private String name;
	Outer(String name){
		this.name = name;
	}
	static class StaticNested {
		void hello(){
			System.out.println("Hello,"+ Outer.NAME);	//上面没有实例化Outer,static是一个独立的类,无法引用Outer.this
		}
	}
}

总结

Java的内部类可分为Inner Class、Anonymous Class和Static Nested Class三种:

  • Inner Class和Anonymous Class本质上是相同的,都必须依附于Outer Class的实例,即隐含地持有Outer.this实例,并拥有Outer Class的private访问权限;

  • Static Nested Class是独立类,但拥有Outer Class的private访问权限。

参考链接

https://www.liaoxuefeng.com/wiki/1252599548343744/1376414781669409

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值