天天看点

java 第3集 内部类

一、内部类定义

将一个类的定义放在另一个类的内部,这叫做内部类。

package i;
//Foo是一个外部类
public class Foo {
	private int v1;	
		public Foo(int v1) {//外部类构造器(非默认构造器)
		super();
		this.v1 = v1;
	}
	public void fooF(){
		//创建内部类的对象,编译器会将this传递给Bar的构造器
		//这样内部类的对象就持有外部类对象的引用
		Bar bar =new Bar();//内部类的对象
		bar.barF();
	}
//Bar是一个内部类
	public class Bar{//构造器没有另外写,为默认构造器
		public void barF(){
			//内部类的对象有一个对外部类的对象的引用outer,因此可以访问外部类的数据
			//outer无视访问修饰符,outer不是java关键字
			System.out.println(v1);//实际为System.out.println(outer.v1);,系统自动加
			//内部类访问外部类的属性v1
		}	
	}
	public static void main(String[] args) {
		Foo foo=new Foo(10);//创建外部类的对象,并把参数传给构造器
		//public Foo(int v1),外部属性v1=10
		foo.fooF();
		//创建内部类对象,必须先有外部类的对象
		//使用foo.new Bar(),编译器会将foo参数传递给Bar的构造器
		Bar bar=foo.new Bar();
		bar.barF();
		
		//bar 和bar2持有同一个外部类对象的引用
		Foo.Bar bar2=foo.new Bar();//即Foo.Bar与bar同作用
		bar2.barF();
	}
}

           

二、局部内部类

在方法中声明的内部类

作用:局部内部类可以使内部类无法被外部察觉。

java 第3集 内部类

三、静态内部类

有时候使用内部类只是为了把一个类隐藏在另一个类的内部,并不需要内部类引用外部类的对象,这种情况可以使用静态内部类。

java 第3集 内部类

调用静态内部类

java 第3集 内部类

匿名内部类

java 第3集 内部类

如果这个对象只需要一个,那么创建一个类去实现接口就太麻烦了。

使用匿名内部类可以解决这个问题。

java 第3集 内部类

java单例模式学习