67 Java 内部类
2014-05-13 14:50
393 查看
package new20140512; class Out { // 定义一个内部类,不使用访问控制符 // 即只有同一个包中得其他类可访问该类的内部类 class InClass { public InClass(String msg) { System.out.println(msg); } } } public class Test3 { public static void main(String[] args) { // Out.InClass in=new Out().new InClass("测试信息"); Out.InClass in; Out out=new Out(); in =out.new InClass("测试信息");//输出:测试信息 } }
package new20140512; class Out { // 定义一个内部类,不使用访问控制符 // 即只有同一个包中得其他类可访问该类的内部类 class InClass { public InClass(String msg) { System.out.println(msg); } } } public class Test3 { public static void main(String[] args) { // Out.InClass in=new Out().new InClass("测试信息"); Out.InClass in; Out out=new Out(); in =out.new InClass("测试信息");//输出:测试信息 } }
package new20140512; class Out { // 定义一个内部类,不使用访问控制符 // 即只有同一个包中得其他类可访问该类的内部类 class InClass { public InClass(String msg) { System.out.println(msg); } } } public class Test3 { public static void main(String[] args) { // Out.InClass in=new Out().new InClass("测试信息"); Out.InClass in; Out out=new Out(); in =out.new InClass("测试信息");//输出:测试信息 } }
局部内部类
package new20140513; /** * 局部内部类 * ——如果一个类放在方法里定义,则这个内部类就是一个局部内部类,局部内部类仅在该方法里有效。 * —— 如果需要局部内部类定义变量、创建实例或派生子类,那么都只能在局部内部类所在的方法内进行 * @author x * */ public class Test1 { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub //定义局部内部类 class InnerBase { int a; } //定义局部内部类的子类 class InnerSub extends InnerBase { int b; } //创建局部内部类的对象 InnerSub is=new InnerSub(); is.a=5; is.b=8; System.out.println("InnerSub 对象的a和b Field是:"+is.a+","+is.b); } }
匿名内部类
package new20140513; /** * 匿名内部类 * ——适合创建那种只需要一次使用的类 * ——语法特点:创建匿名内部类时会立即创建一个该类的实例,这个类定义立即消失, * 匿名内部类不能重复使用 * * @see 定义格式: * new 父类构造器(实参列表)|实现接口() * { * //匿名内部类的类体部分 * } * ——匿名内部类必须继承一个父类,或实现一个接口,但最多只能继承一个父类,或实现一个接口 * ——匿名内部类不能时抽象类 * ——匿名内部类不能定义构造器 * @author x * */ interface Product { public double getPrice(); public String getName(); } public class Test2 { public void test(Product p) { System.out.println("购买:"+p.getName()+",单价:"+p.getPrice()); } /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub Test2 test2=new Test2(); //调用test方法时,需要传入一个Product参数 //参数传入其匿名实现类的实例 test2.test(new Product() { @Override public double getPrice() { // TODO Auto-generated method stub return 4999; } @Override public String getName() { // TODO Auto-generated method stub return "联想PC"; } }); } }
package new20140513; /** * 匿名内部类 * ——适合创建那种只需要一次使用的类 * ——语法特点:创建匿名内部类时会立即创建一个该类的实例,这个类定义立即消失, * 匿名内部类不能重复使用 * * @see 定义格式: * new 父类构造器(实参列表)|实现接口() * { * //匿名内部类的类体部分 * } * ——匿名内部类必须继承一个父类,或实现一个接口,但最多只能继承一个父类,或实现一个接口 * ——匿名内部类不能时抽象类 * ——匿名内部类不能定义构造器 * @author x * */ interface Product { public double getPrice(); public String getName(); } public class Test2 { public void test(Product p) { System.out.println("购买:"+p.getName()+",单价:"+p.getPrice()); } /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub Test2 test2=new Test2(); //调用test方法时,需要传入一个Product参数 //参数传入其匿名实现类的实例 test2.test(new Product() { @Override public double getPrice() { // TODO Auto-generated method stub return 4999; } @Override public String getName() { // TODO Auto-generated method stub return "联想PC"; } }); InTest2 inTest2=new InTest2(); System.out.println("购买:"+inTest2.getName()+",单价:"+inTest2.getPrice()); } } //可以拆分成一下代码 class InTest2 implements Product { @Override public double getPrice() { // TODO Auto-generated method stub return 4999; } @Override public String getName() { // TODO Auto-generated method stub return "联想PC"; } }
相关文章推荐
- myeclipse 10.0 激活心得
- JBoss的安装与配置
- 二分排序(java语言)
- Java
- 常数变易法_打印图形
- 装饰模式
- struts2 结合extjs实现的一个登录实例
- java实现事件委托
- struts的MVC详细实现
- Divide Two Integers
- Java学习(一)
- ubuntu12.04 安装java jdk6
- Java中的图形界面编程
- struts的由来
- java cas 非阻塞学习
- 转载和积累系列 - java中Keytool的使用总结
- 转: 深入分析Java ClassLoader原理
- ControlCircle
- Java内存分配全面浅析
- ArcGIS Server for Java的REST接口无法访问的问题 .