package cn.china; class body{ String name="hand"; class head{ String nString="foot"; void show(){ System.out.println(name+this.nString); } } public void accept(){ head h=new head(); h.show(); } } public class Demo1 { public static void main(String[] args) { new body().accept(); body.head in=new body().new head(); in.show(); // TODO Auto-generated method stub } }
package cn.china; /**内部类的修饰符 * private 私有 * static 修饰的内部类 实例化格式outer.inner in=new outer.inner();outer直接调用静态类,然后 * new内部类的对象就可以了;如果内部类是静态的,里面成员也是静态的,就可以直接“外部类名.内部类名.方法名”调用 * 还需要注意,内部类中如果有静态成员,这个内部类必须是静态的*/ class outer{ static int num=5; static class inner{ void show1(){ System.out.println("inner run1"+num); } static void show2(){ System.out.println("inner run2"+num); } } } public class Demo2 { public static void main(String[] args) { outer.inner in=new outer.inner(); in.show1(); outer.inner.show2(); // TODO Auto-generated method stub } }
package cn.china; abstract class 水果{ abstract void eat(); } class Person{ void method(){ new 水果()//实际上这就是一个子类对象 { void eat() { System.out.println("人吃西红柿"); } void play(){//需要注意如果要调用这个方法,需要注意用子类对象调用,如果向上转型父类中没有此方法编译会失败 System.out.println("haha"); } }.play(); } } public class Demo3 { public static void main(String[] args) { new Person().method(); // TODO Auto-generated method stub } }
package cn.china; class outer4{ int num=4; void method(){ final int x=9; //局部内部类访问局部变量,这个局部变量必须是常量,要用final修饰 class inner{ void show(){ System.out.println("show run"+num); } void function(){ System.out.println("function run"+x); } } inner in=new inner(); in.function(); in.show(); } } public class Demo4 { public static void main(String[] args) { outer4 o=new outer4(); o.method(); // TODO Auto-generated method stub } }
package cn.china; interface A{ void show1(); void show2(); } class outer5{ void method(){ A a=new A(){//向上转型 public void show1(){System.out.println("show1 run");} public void show2(){System.out.println("show2 run");} };//注意分号结尾 a.show1(); a.show2(); } } public class Demo5 { public static void main(String[] args) { new outer5().method(); // TODO Auto-generated method stub function(new A()//这种使用方法,只能是接口内方法不能超过3个,不然影响易读性 { public void show1(){System.out.println("show1 run");} public void show2(){System.out.println("show2 run");} }); } /**关于匿名内部类的应用之一*/ public static void function(A a){ a.show1(); a.show2(); } }