zoukankan      html  css  js  c++  java
  • Think in java 第八章 多态 第九章 接口 第十章 内部类

    第八章 多态
        静态方法不具备多态因为它是与类,而非单个对象相关联的。
        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
            
        为什么需要内部类:
            每个内部类都能独立地继承自一个(接口的)实现,所以无论外围类是否已经继承了某个(接口)的实现,对于内部类都没有影响
            内部类有效地实现了“多重继承”. 

  • 相关阅读:
    回头再看libpcap
    lex error
    perl 的威力
    什么叫回流和重绘?
    HTTP协议与FTP协议的区别【转】
    Linux操作系统Redhat系列与Debian系列 【转】
    dock是什么? docker就是集装箱原理【转】
    光端机的作用【转】
    c++ -- call_once用法
    c++ -- thread详细解析
  • 原文地址:https://www.cnblogs.com/lgxqf/p/1636115.html
Copyright © 2011-2022 走看看