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";
            }
        });
    }
}
posted @ 2014-07-24 00:17  爱吃萝卜干  阅读(129)  评论(0编辑  收藏  举报