0723 (内部类作为父类) (静态/非静态类用法)匿名内部类(工厂一次用)
内部类作为父类:
//P206 //外部类Out //非静态内部类In //它的子类SubClass //In的对象需要有一个对Out对象的引用 //SubClass的对象里也需要有一个Out对象的引用 //当创建Subclass类的对象时,必须使用Out对象显示调用In的构造器 public class Out { public String name; public Out(String msg) { System.out.println(msg); } public class In //注意此时,不管是静态,非静态都是这样用的 { public In(String msg) { System.out.println(msg); } } public static void main(String[] args) { Out.In in; //注意是用外部类、内部类,再定义in对象 Out out=new Out("i am a out object"); //定义并且初始化一个out对象 in=out.new In("i am a in object"); //注意,此时用out对象,NOT Out类进行new } } //PS :若此时是静态内部类,则可以直接用 In in =new Out.In(); 用类进行new
静态/非静态类用法的区别
匿名内部类(工厂一次用):
interface Product //定义一个接口规范 { public double getPrice(); public String getName(); } public class Anonymous //不是实现类!注意,不用implements { public void test(Product p) //需要在这里调用 { System.out.println(p.getName()+" counts "+p.getPrice()); } //但是实现类尚未定义 public static void main(String[] args) { Anonymous a1=new Anonymous(); a1.test(new Product() //注意得先new product { public double getPrice() { return 2.3; } public String getName() { return "aniy"; } }); } }