1.静态内部类
1 package innerclass; 2 /* 3 * 静态内部类 4 * 静态类只能访问外部类的静态成员变量或方法 5 * StaticInner.Inner inner = new StaticInner.Inner(); 6 */ 7 class StaticInner 8 { 9 PRivate static int a = 4;10 11 public static class Inner12 {13 public void test()14 {15 System.out.println(a);16 }17 }18 }19 20 public class StaticInnerClassTest21 {22 public static void main(String[] args)23 {24 //定义静态内部类的吗对象25 StaticInner.Inner inner = new StaticInner.Inner();26 27 inner.test();28 }29 }
2.成员内部类
1 package innerclass; 2 /* 3 * 成员内部类 4 * 可以访问一切的外部的成员变量和方法 5 * MemberInner.Inner2 inner = (new MemberInner()).new Inner2(); 6 */ 7 class MemberInner 8 { 9 private int a = 4;10 11 public class Inner212 {13 14 private int a = 5;15 16 //访问外部类的成员变量17 public void doSomething()18 {19 System.out.println(MemberInner.this.a);20 }21 22 //访问内部类的成员变量23 public void doSomething1()24 {25 System.out.println(this.a);26 System.out.println(a);27 }28 29 }30 31 public void method()32 {33 //在外部类中创建内部类34 MemberInner.Inner2 inner = this.new Inner2();35 Inner2 inner2 = this.new Inner2();36 }37 }38 39 public class MemberInnerClassTest40 {41 public static void main(String[] args)42 {43 //定义成员内部类对象44 MemberInner.Inner2 inner = (new MemberInner()).new Inner2();45 46 inner.doSomething(); 47 }48 }
3.局部内部类
1 package innerclass; 2 /* 3 * 局部内部类 4 * 不能用public,protected,private,static修饰 5 * 只能访问final修饰的局部变量 6 */ 7 class LocalInner 8 { 9 public void doSomething()10 {11 final int a = 4;12 13 class Inner314 {15 public void test()16 {17 System.out.println(a);18 }19 }20 21 (new Inner3()).test();22 }23 }24 25 public class LocalInnerClassTest26 {27 public static void main(String[] args)28 {29 LocalInner localInner = new LocalInner();30 31 localInner.doSomething();32 33 }34 }
4.匿名内部类
1 package innerclass; 2 /* 3 * 匿名内部类(局部内部类的一种形式) 4 * 没有名字的类 5 * 没有关键字class,extends,implements 6 * 没有构造方法 7 * 匿名内部类会隐式地继承一个父类或实现一个接口。 8 */ 9 import java.util.Date;10 public class AnonymousInnerClassTest11 {12 @SuppressWarnings("deprecation")13 public String get(Date date)14 {15 return date.toLocaleString();16 }17 18 public static void main(String[] args)19 {20 AnonymousInnerClassTest test = new AnonymousInnerClassTest();21 22 //String str = test.get(new Date());;23 //System.out.println(str);24 25 //定义一个匿名内部类,它继承了Date类(或者实现某一个接口)26 String str = test.get(new Date()27 { 28 //重写Date类的toLocaleString()方法29 public String toLocaleString()30 {31 return "hello world";32 }33 });34 System.out.println(str);35 } 36 }
新闻热点
疑难解答