匿名內部類、成員類與區域性類
阿新 • • 發佈:2019-01-06
今天看程式碼,看到幾個概念:內部類、區域性類、成員類、靜態成員類、匿名內部類;瞬間有種被搞糊塗了感覺。下面是一個小例子來對它們進行說明:
public class ClassTest{ public static void main(String[] args) { ClassTest son = new ClassTest(); //測試匿名類 son.testAnonymous(new AnonymousClass() { @Override public void test() { System.out.println("1 -> " + this.getClass().isMemberClass()); System.out.println("1 -> " + this.getClass().isAnonymousClass()); System.out.println("1 -> " + this.getClass().isLocalClass()); System.out.println("---------------------------------------"); } }); //測試成員類 son.testMember(); //測試靜態成員類 new StaticMemberClass(); //測試區域性類 class LocalClass{ public LocalClass(){ System.out.println("4 -> " + this.getClass().isMemberClass()); System.out.println("4 -> " + this.getClass().isAnonymousClass()); System.out.println("4 -> " + this.getClass().isLocalClass()); System.out.println("---------------------------------------"); } } new LocalClass(); } private void testAnonymous(AnonymousClass inner) { inner.test(); } private void testMember() { new MemberClass(); } /** * 介面,用於測試內部類 * @author xinghzhang * */ interface AnonymousClass{ public void test(); } /** * 靜態成員類 * @author xinghzhang * */ static class StaticMemberClass{ public StaticMemberClass() { System.out.println("3 -> " + this.getClass().isMemberClass()); System.out.println("3 -> " + this.getClass().isAnonymousClass()); System.out.println("3 -> " + this.getClass().isLocalClass()); System.out.println("---------------------------------------"); } } /** * 成員類 * @author xinghzhang * */ class MemberClass{ public MemberClass() { System.out.println("2 -> " + this.getClass().isMemberClass()); System.out.println("2 -> " + this.getClass().isAnonymousClass()); System.out.println("2 -> " + this.getClass().isLocalClass()); System.out.println("---------------------------------------"); } } }