`

内部类详解及举例说明

阅读更多

内部类(Inner Class),内部类共分为4种。
1.静态内部类(static inner class):只能访问外部类的静态成员变量与静态方法,生成
静态内部类对象的方式为:
OuterClass.InnerClass inner = new OuterClass.InnerClass();
2.成员内部类(member inner class):可以访问外部类的静态与非静态的方法与成员变
量。生成成员内部类对象的方式为:
OuterClass.InnerClass inner = new OuterClass().new InnerClass();
若想在局部内部类中访问外部类的成员变量,语法为:OuterClass.this.a;
3.局部内部类(Local Inner Class):定义在方法当中,只能访问方法中声明的final类型
的变量。
4.匿名内部类(Anonymous Inner Class):没有类名称的局部内部类;匿名内部类会隐式地继承一个父类或实现一个接口。

 

静态内部类和成员内部类比较简单在此就不举例了。

局部内部类代码示例:

package com.lfl.innerclass;

class LocalInner {
	private  int a = 3;
	
	public void doSomething() {
		final int i = 5;
		class Inner3 {
			
			public void test() {
				System.out.println(i);
				System.out.println(a);
				go();
			}
		}
		new Inner3().test();
	}
	
	public static void go() {
		System.out.println("hello");
	}
	
}


public class LocalInnerClassTest {

	public static void main(String[] args) {
		LocalInner inner = new LocalInner();
		inner.doSomething();
	}

}

 

 

匿名内部类代码示例:

package com.lfl.innerclass;

import java.util.Date;

public class AnonymousInnerClassTest {
	
	public String get(Date date) {
		return date.toLocaleString();
	}
	
	public Object getObject() {
		return new Object() {
			public String toString() {
				System.out.println("hello world2");
				return "hello";
			}
		};
	}
	

	public static void main(String[] args) {
		AnonymousInnerClassTest inner = new AnonymousInnerClassTest();
		// non anonymous innerclass
		String date = inner.get(new Date());
		System.out.println(date);
		
		//anonymous innerclass
		String str = inner.get(new Date() {
			public String toLocaleString() {
				return "hello world";
			}
		});
		System.out.println(str);
		
		Object obj = inner.getObject();
		String s = obj.toString();
		System.out.println(s);
	}

}

 

 

 

 

 

 

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics