lgxqf  
第八章 多态
    静态方法不具备多态因为它是与类,而非单个对象相关联的。
    Java中除了final和static方法之外,其它所有的方法都是后期绑定的
    构造函数中的虚函数是动态联编的,但在C++中是静态联编的 TIJ书 P163
    子类不可改变基类中函数的可见性。若基类中某函数为public,在继承时该函数仍需为public
    Java SE5 添加了返回类型,它允许子类在虚函数中返回基类的子类型。在实现protype设计模式时会用到该功能。
        public class Grain
        {    
            public Grain cloneObject()
            {
                return new Grain();
            }
        }

        class Wheat extends Grain
        {
            public Wheat cloneObject()
            {
                return new Wheat();
            }
        }
    向下转型:
        Base b = new Derive();   
        ((Derive)b).deriveClassFunction();
        若转型失败就会返回一个ClassCastException异常

第九章 接口
    abstract 抽象类或方法的关键字
    interface 接口类的关键字,interface中的方法只能是public的,且只有原型没有实现。
    interface 中的任何成员变量默认是 public static final的
    基类和子类都共享基类的静态变量
    抽象类与接口类的区别:
        抽象类中可以有函数的定义,接口类不能有函数的定义
    实现多个接口的语法:
        Class Hero extends Human  implements Fly, Swim,Fight{}
    接口中的成员变量不能是空白final, 但可以被非常量表达式初始化

    public interface Rand    { int VAL = Rand.nextInt(10);}

 

第十章 内部类
    在外部类的非静态方法中可以直接创建内部类对象,但在外部类的非静态方法之外只能通过外部的函数创建内部类。
    例:
        Outter out = new Outter();
        Outter.Inner in = out.getInner();
    .this .new
        .this 在内部类的函数中返回外部类的引用
            public class Outter{
                public class Inner{
                    Outter getOutter(){ return Outter.this}
                }
        .new 通过外部类对象的引用创建内部类对象。
            Outter out = new Outter();
            Outter.Inner in = out.new Inner();
        若inner是静态内部类,若内部类是静态类则可直接创建
            Outter.Inner in =  new Outter.Inner();

    在作用域和方法内的类仅在作用域内可用,在作用域外不能访问。
    内部类可以直接访问外部内的成员变量,但访问在外部定义的对象时,如外部类函数的参数,该参数必须声明为final
    匿名类:
        匿名类不能有构造函数,但可以通过实例初始化{}来初始化匿名类的成员变量
        匿名类相当于new 后面的所指定的类的子类,return new Base(){ void BaseClassMethod(){} } 相当于返回了一个Base的子类对象。 详见书中练习12 P199
    
    嵌套类:
        将内部类声明为static.
        它与内部类的区别:
            1.内部类有一个指向外部类的引用,而嵌套类没有,所以嵌套类不可直接访问外部类的非静态成员或方法。
            2.内部类不能有静态的成员或方法,但嵌套类可以有。
        可以将测试代码放在嵌套类中, 在发布产品时将嵌套类的class文件删就可以了。如  Outter$inner.class
        
    为什么需要内部类:
        每个内部类都能独立地继承自一个(接口的)实现,所以无论外围类是否已经继承了某个(接口)的实现,对于内部类都没有影响
        内部类有效地实现了“多重继承”. 

posted on 2009-12-30 15:57  Justin_Ma  阅读(364)  评论(0编辑  收藏  举报