標籤:java
一.內部類:
1).內部類的定義:通俗的講就是在一個類的裡面再定義一個類。
2).內部類可以public,private,protected等修飾,也可以是靜態static。
二.四種內部類的實現:
1).靜態內部類:
例子:
class InnerClass {public static int count = 10;//靜態內部類public static class Inner{public void print(){System.out.println(count);}}}public class StaticInnerClass { public static void main(String[] args) {InnerClass.Inner inner = new InnerClass.Inner();inner.print();}}
結果:10
靜態內部類只能訪問外部類的靜態成員變數與靜態方法。因為內部類被靜態化,所以可以直接new出內部類的對象。
2).成員內部類:
例子:
class MemberClass{public int count = 10;public static int number = 1;//成員內部類public class Inner{public void print(){ System.out.println(count+" "+number);}}}public class MemberClassTest {public static void main(String[] args) {//通過外部類的對象,new出內部類對象。MemberClass.Inner mem = (new MemberClass()).new Inner(); mem.print();}}
結果: 10 1 成員內部類作為外部類的成員,可以直接使用外部類的所有成員和方法,內部類對象的建立要先建立外部類的對象才能建立內部類對象:OuterClass.InnerClass inner = (new OuterClass()).new innerClass(); 如果想在成員內部類使用外部類的成員變數則需要:OuterClass.this.變數名。
3).局部內部類 :
例子:
class LocalInnerClass{public void test(){class Inner{public void print(){System.out.println("HAHA");}}new Inner().print();}}public class LocalInnerClassTest {public static void main(String[] args) {LocalInnerClass inn = new LocalInnerClass();inn.test();}}
結果:HAHA
局部內部類是指定在方法或範圍中的。只能在該方法或範圍中使用,退出這些範圍之後則無法使用。
局部內部類只能存取方法中用final類型的變數。
4).匿名內部類:
例子:
class AnonymousClass{@SuppressWarnings("deprecation")public void print(Date data){ System.out.println(data.toLocaleString());}}public class AnonymousClassTest {public static void main(String[] args) {AnonymousClass an = new AnonymousClass();an.print(new Date());an.print(new Date(){@Override@Deprecatedpublic String toLocaleString() {// TODO Auto-generated method stubreturn "HAHA";}});}}
結果:
2015-3-17 21:28:11
HAHA
匿名內部類隱式的繼承一個父類或一個介面。匿名內部類是不能加存取修飾詞的。這種內部類用在事件上比較多。
java(24) - 內部類詳解