黑马程序员---面向对象之内部类

长平狐 发布于 2013/07/01 15:31
阅读 82
收藏 0
-------------------------android培训java培训、期待与您交流! -------------------------

Java中的内部类有四种:一般内部类、静态内部类、局部内部类、匿名内部类。

一、一般内部类

定义:将一个没有用static修饰的类定义在另一个类里面,对里面的那个类就称为一般内部类(内置类,嵌套类)。

特点

1、内部类可以直接访问外部类的成员。包括私有成员变量,因为内部类中持有了外部类的一个引用。

2、外部类要访问内部类的成员必须建立内部类的对象。

举例

public class InnerClass {
	public static void main(String[] args) {
		// 一般内部类需要通过外部类的实例才能创建对象
		Outer.Inner inner = new Outer().new Inner();
		inner.inFun();
	}
}
class Outer{
	private int x = 10;
	//内部类
	class Inner{
		private int y=5;
		void inFun(){
			System.out.println("x=" + x);
			System.out.println("y=" + y);//直接访问外部类的成员变量
			outFun();//直接访问外部类的成员方法
		}
	}
	void outFun(){
		System.out.println("外部类方法被调用");
	}
	//外部类方法中直接创建内部类对象
	private Inner getInnerObj(){
		return new Inner();
	} 
}

二、静态内部类

与类的其他成员相似,可以用static修饰内部类,这样的类称为静态内部类。。

注意:

1、当内部类中定义了静态成员,该内部类必须是static的,

2、当外部类中的静态方法访问内部类时,内部类也必须是static的

3、当内部类被static修饰后,只能直接访问外部类中static成员,不能直接访问外部类的实例变量,与实例方法,只有通过对象引用才能访问。
 4、由于static内部类不具有任何对外部类实例的引用,因此static内部类中不能使用this关键字来访问外部类中的实例成员,但是可以访问外部类中的static成员。

举例

public class Outer {
	public static int x = 100;
	public static class Inner {
		private String y = "abc";
		public void inFun() {
			System.out.println("x=" + x);
			System.out.println("y=" + y);
		}
	}
	public static void main(String[] args) {
		// 静态内部类不通过外部实例就可以创建对象;与类变量可以通过类名访问相似
		Outer.Inner in = new Outer.Inner();
		in.inFun();
	}
}

三、局部内部类

定义:在方法体或语句块(包括方法、构造方法、局部块或静态初始化块)内部定义的类成为局部内部类。 

注意:

1、局部内部类不能加任何访问修饰符,因为它只对局部块有效,静态是成员修饰符,不能用在局部,所以不能定义静态局部内部类。

2、内部类中定义局部变量,必须定义为final的。

举例

public class Outer {
	public void funcOut() {
		int x = 100;
		//final int x = 100;
		
		class Inner { // 这里不能有访问修饰符
			
			public void funIn() {
				System.out.println("这是局部内部类");
				//System.out.println(x); 这里不能访问x,除非把x声明成final
			}
		}
		// 在这里new局部内部类的对象,并调用方法
		Inner in = new Inner();
		in.funIn();
	}

	public static void main(String args[]) {
		Outer out = new Outer();
		out.funcOut();
	}
}


四、匿名内部类 

1、匿名内部类其实就是内部类的简写格式。

2、定义匿名内部类的前提: 内部类必须是继承一个类或者实现接口。

3、匿名内部类的格式:new 父类或接口(){定义子类的类容}。

4、其实匿名内部类就是一个匿名子类对象。

5、匿名内部类中定义的方法最好不要超过三个。

举例
public class NiMingInnerClass {
	public static void main(String[] args) {
		Outter out = new Outter();
		out.function();
	}
}
class Outter{
	int x = 3;
	void function(){
		new AbsDemo(){
			void show(){
				System.out.println("x= "+x);
			}
		}.show();
	}
}
//
abstract class AbsDemo{
	abstract void show();
}









-------------------------android培训java培训、期待与您交流! -------------------------

原文链接:http://blog.csdn.net/voiceofnet/article/details/7272629
加载中
返回顶部
顶部