嵌套类与内部类在java中使用的很广泛,为了避免难以理解,这里用了几个小例子,说明它的用法。
嵌套类与内部类的结构如下图
静态嵌套类
静态嵌套类,是一种在类之外声明的嵌套类,由于是静态的,所以不经过初始化,就可以通过类名,直接调用。
1 class out1{ 2 private static String name = "xingoo"; 3 static class info{ 4 void print(){ 5 System.out.println("name:"+name); 6 } 7 } 8 }
使用样例
View Code
成员内部类
成员内部类,即该类作为另一个类的成员,因此只有引用另一个类,才能创建这个类。
1 class outer{ 2 private String name = "xingoo"; 3 class inner{ 4 void print(){ 5 System.out.println(name); 6 } 7 } 8 }
通常也用于隐藏的实现某个接口,如下面所示,第一种是传统的实现方式,第二种是隐藏了实现接口的实现方式。
1 interface Printer{ 2 void print(String name); 3 } 4 class outerImpl1 implements Printer{ 5 @Override 6 public void print(String name) { 7 System.out.println(name); 8 } 9 } 10 class outerImpl2{ 11 private class inner implements Printer{ 12 @Override 13 public void print(String name) { 14 System.out.println(name); 15 } 16 } 17 public Printer getPrinter(){ 18 return new inner(); 19 } 20 }
使用样例
View Code
局部内部类
局部类的声明之作用与某个代码块内,因此如果某个声明的类仅仅被一段程序所使用,其他地方再也用不到,就可以用这种实现方式。·
1 interface Logger{ 2 public void log(String message); 3 } 4 public class test3 { 5 6 String startTime = (new Date()).toString(); 7 /** 8 * 局部内部类,从定义上来讲,不属于任何其他的类,因为是声明在这个类内部的。与匿名内部类不同的就是它有名字。 9 * @return 10 */ 11 public Logger getLogger(){ 12 //由于LoggerImpl只在 getLogger内部使用,因此把它定义在函数内部,相对来说更安全一些 13 class LoggerImpl implements Logger{ 14 @Override 15 public void log(String message) { 16 System.out.println(startTime + ":" + message); 17 } 18 } 19 return new LoggerImpl(); 20 } 21 22 public static void main(String[] args){ 23 test3 test = new test3(); 24 Logger logger = test.getLogger(); 25 logger.log("hello xingoo!"); 26 } 27 }
匿名内部类
在使用new创建对象时,直接在后面创建它的实现类。
1 abstract class Printable{ 2 public void print(String name){ 3 4 } 5 } 6 /** 7 * 就是跟在new创建对象之后,直接定义它的类实现 8 * @author Administrator 9 */ 10 public class test4 { 11 public static void main(String[] args){ 12 Printable printer = new Printable(){ 13 public void print(String name){ 14 System.out.println(name); 15 } 16 };//注意因为这其实是一个new语法,因此要加上分号; 17 printer.print("hello!xingoo!"); 18 } 19 }
参考资料:《JAVA 7程序设计》
本文转自博客园xingoo的博客,原文链接:【java开发系列】—— 嵌套类与内部类,如需转载请自行联系原博主。