67 Java 内部类

来源:互联网 发布:千牛设置淘宝分流 编辑:程序博客网 时间:2024/06/12 20:50
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 stubTest2 test2=new Test2();//调用test方法时,需要传入一个Product参数//参数传入其匿名实现类的实例test2.test(new Product() {@Overridepublic double getPrice() {// TODO Auto-generated method stubreturn 4999;}@Overridepublic String getName() {// TODO Auto-generated method stubreturn "联想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 stubTest2 test2=new Test2();//调用test方法时,需要传入一个Product参数//参数传入其匿名实现类的实例test2.test(new Product() {@Overridepublic double getPrice() {// TODO Auto-generated method stubreturn 4999;}@Overridepublic String getName() {// TODO Auto-generated method stubreturn "联想PC";}});InTest2 inTest2=new InTest2();System.out.println("购买:"+inTest2.getName()+",单价:"+inTest2.getPrice());}}//可以拆分成一下代码class InTest2 implements Product{@Overridepublic double getPrice() {// TODO Auto-generated method stubreturn 4999;}@Overridepublic String getName() {// TODO Auto-generated method stubreturn "联想PC";}}


0 0