java核心技术卷1第5章-------继承

======================java核心技术卷1第5章-------继承=================================
主要内容:
    1 类,超类和子类
    2 Object
    3 泛型数组列表
    4 包装器和自动装箱
    5 参数可变方法
    6 枚举类
    7 反射
    8 继承设计技巧
======================================================================================

1 类,子类与超类
    1.1  如果我们定义一个类,并使用extends表面这个新类派生于一个已经存在的类,
        那么已经存在的这个类即为超类,也叫基类或父类;要定义的这个新类为子类
        
    1.2 覆盖方法:当超类中的方法对子类不一定适用时,需要在子类重新定义这个方法,及重写该方法
            java中使用super.方法名 即可调用父类中的方法,C++中调用方式为:父类名::方法名 
            
    1.3 子类构造器:在子类中可以使用super调用超类的构造器,如子类没有显示的调用,则自动调用超类默认的构造器。
            如果超类没有不带参数的构造器,且子类的构造器没有显示的调用其他构造器,则编译器或报错。
            子类调用suoper构造器的语句必须实在子类构造器的第一条语句
            
    1.4 继承与多态:由一个公共超类派生出来的集合被称为继承层次,Java不支持多继承,但是可以通过接口来实现
            一个类只能继承一个类,但是可以实现多个接口
        java中的多态形式:重载和重写;
        重载:方法名一致,参数个数不同或者参数类型不同,返回类型可以不一致,可在一个类或继承中使用
        重写:方法名一致,参数列表,返回类型都要求一致,只是具体实现不同,只能在继承类中
        抽象类:用Abstract关键字修饰,类中的方法只声明,不实现,具体实现由子类实现;功能对应C++中的纯虚函数
        instanceof :判断两个对象是否属于同一类型
2 Object 
    Java中有一句经典的话:万物皆对象,Java中所有的类都是由Object扩展而来,如果一个类没有明确指定它的父类,
    那么Object就是它的父类或者父类的父类,或者父类的父类的...的父类
    
    2.1 equals:用于检测一个对象是否与另一个对象相等
        hashCode:生成每个对象的散列码

3 泛型数组列表
    3.1 C++在设计数组的时候是在编译阶段确定数组大小的,一旦确定大小,更改就不那么容易了
        而Java可以使用ArrayList自动调节数组容量大小,ArrayList是采用类型参数的泛型类,使用方法如:
            ArrayList<ObjectType> array=new ArrayList<>();
            List<ObjectType> array=new ArrayList<>();
    3.2 在ArrayList中,添加元素用add,而set方法只能修改已经存在的元素值,
        在ArrayList添加元素完毕后,通过toArray方法将数组中的元素拷贝到一个数组中,可以更方便访问数组元素

4 自动拆箱装箱
        我们都知道,在Java中,万物皆对象。一个基本的数据类型,如int,都会有一个与之对应的类(Integer),
        通常将这些类成为包装器。常见的包装器类有:
        Integer,Long,Float,Double,Short,Byte,Character,Void,Boolean
        如定义一个整形的List,尖括号内的数据类型事不允许出现基本类型的,而要使用包装类型:
        List<Integer> list=new ArrayList<>();
    
5 参数可变方法
    现在的Java版本可以提供可变参数数量调用的方法,如printf
    用户也可以自己定义可变参数的方法,并将参数指定任意类型
6 枚举类
    声明定义一个类,类里面是定义的实体。枚举类可以又构造器,方法,域;构造器只有在构造枚举常量的时候使用
    
7 反射
    7.1 能够用来分析类的程序成为反射,反射机制可以:
        运行时分析类的能力
        运行时查看对象
        在通用的数组操作代码
        利用method对象
    class类:
        程序运行期间,Java运行时始终为所有的对象维护一个被称为运行时的类型标识,这个信息跟踪着每个对象所属的类,
        虚拟机利用运行时的类型信息选择相应的方法执行。也可以通过专门的Java类访问这些信息,保存这些信息的类成为class
        Oject 的getClass()方法会返回一个Class类型的实例,用getName()可以获取类的名字
    7.2 捕获异常
        当程序运行时发生错误时,就会抛出异常,如果没有提供捕获异常的处理器,程序就会终止
        异常用两种类型:未检查异常和已检查异常,对于已检查异常,编译器会检查是否提供了处理器;
            对于未检查异常,编译器不会查看是否未这些错误提供了处理器,捕获异常 常用的形式
        try{
            statements...
        
        }catch(Exception e){
            handler action
        }
    7.3 反射能力
        检查类的机构:java reflect 类中包含3个类,Field,Method,Constructor分别用于描述类的域,方法,和构造器
        三各类都有getName()方法,用于返回项目的名称
    7.4 使用反射编写泛型数组代码:Java.lang.reflect包中的Array类运行动态创建数组

8 继承设计技巧
    将公共类操作和域放在父类
    不要使用收保护的域
    使用继承实现"is-a"关系
    除非所有继承的方法都有意义,否则不使用继承
    在覆盖方法时,不要改变预期的行为
    使用多态,而非类型信息
    不要过多使用反射

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值