JAVA2核心技术卷I:基础知识(原书第7版) -- 第5章. 继承

来源:互联网 发布:共射放大电路实验数据 编辑:程序博客网 时间:2024/05/22 04:02

1. 调用和子类同名的父类方法 super.getSalary(); 

2. 多态

    2.1 子类对象赋值给父类对象: Employee e = new Manager(...);

    2.2 重载(overloading): x.f(String)和x.f(int)

    2.3 阻止继承: final类和final方法。final类不能被继承,final方法不能被覆盖,final类中所有的方法为final方法,final域构造之后值不能被修改。

3. 强制转换: Manager boss = (Manager)staff[0];  在父类转换成子类之前,需要使用instanceof进行检查

    转换之前进行检查: if (staff[i] instanceof Manager) {boss = (Manager)staff[i];}  //转换不成功,编译器不转换

4. 抽象类: 抽象类可以有具体数据和具体方法,接口仅仅只有方法定义,没有实现。抽象类不能被实例化。final方法和类: 阻止继承。

5. 访问限制

    public: 对所有类都可见

    private: 仅对本类可见

    protected: 对本包和所有子类可见

    默认: 对本包可见

6. Object: 所有类的超类

    6.1 equals方法 - 在Object中用于判断两个对象是否具有相同的引用,以下是复写Object的equals方法

        public boolean equals(Obejct otherObject) {

            if (this == otherObject) return true;  //检测this与otherObject是否引用同一个对象

            if (otherObject == null) return false;  //检测otherObject是否为null

            if (getClass() != otherObject.getClass) return false;  //比较this与otherObject是否属于同一个类

            Employee other = (Employee)otherObject;  //将otherObject转换为相应的类型

            return name.equals(other.name) && salary == other.salary ;  //对所有域进行比较

        }

    6.2 hashCode方法 - equals与hashCode的定义必须一致,如果x.equals(y)返回true,那么x.hashCode就必须与y.hashCode()具有相同的值

        6.2.1 String类计算散列码

                int hash = 0;

                for (int i=0; i<length(); i++)

                    hash = 31 * hash + charAt(i);

        6.2.2 Employee的hashcode方法

                public int hashCode() {

                    return 7 * name.hashCode() + 11 * new Double(salary).hashCode() + 13 * hireDay.hashCode();

                }

    6.3 toString方法

        public String toString() {

            return getClass().getName() + "[name=" + name + ",salary=" + salary + ",hireDay=" + hireDay + "]";

        } 

7. 泛型数组

    7.1 操作方法

        ArrayList<Employee> staff = new ArrayList<Employee>();  //声明

        staff.add(new Employee("Harry Hacker",...));  //在数组列表尾端添加一个元素

        staff.ensureCapacity(100);  //填充数据之前确定元素容量

        ArrayList<Employee> staff = new ArrayList<Employee>(100);  //初始容量传递给ArrayList 

        int size()  //返回存储在数组列表中的当前元素数量(这个值可能小于或等于数组列表的容量)

        void trimToSize()  //将数组列表的存储容量消减为当前尺寸

    7.2 访问数组列表元素

        staff.set(i, harry);    等价于    a[i]=harry;    //对元素赋值

        Employee e = staff.get(i);    等价于   Employee e = a[i];    //获取元素

        for(Employee e : staff);    等价于   for(int i=0; i<staff.size(); i++) {Employee e = (Employee)staff.get(i)}    //对数组列表循环

        add(int index, T obj)  //向后移动元素,插入新元素

        remove(int index)  //删除一个元素

8. 对象包装器和自动打包

    譬如Integer类对象基本类型int

    ArrayList<Integer> list = new ArrayList<Integer>();

    list.add(3);    将自动变成    list.add(new Integer(3));    //自动打包

    int n = list.get(i);    将自动变成    int n = list.get(i).inValue();    //自动拆包

    Integer.toString(int i);  //int转换成String    Integer.parseInt(String s);  //String转换成int    Integer.valueOf(String s);  //String转换为Integer    Integer.intValue();  //Integer转换为int 

    Public static double max(double... values){} //double... values 表示可以接收多个参数,如同double[] values. 

9. 反射

    9.1 基本方法

        Class cl = e.getClass();   或者   Class cl = Class.forName(clsssName);  //获得class类型

        if (e.getClass() == Employee.class)  //比较两个类是否相等

        e.getClass().newInstance();  //创建一个类的实例

    9.2 获取属性方法

        9.2.1 java.lang.Class

            Field[] getDeclaredFields()  //返回包含Field对象的数组,这些对象记录了该类的全部域。

            Field[] getDeclaredMethods()  //返回该类或接口的全部方法,不包括由超类继承的方法。

            Field[] getDeclaredConstructors()  //返回所有构造器。

        9.2.2 java.lang.reflect.Field    java.lang.reflect.Method    java.lang.reflect.Constructor

            Class getDeclaringClass()  //返回一个用于描述类中定义的构造器、方法或域的Class对象

            Class[] getExceptionTypes()  //返回一个用于描述方法抛出的一场类型的Class对象数组

            int getModifiers()  //返回一个用于描述构造器、方法或域的修饰符的整型数值

            Class[] getParameterTypes()  //返回一个用于描述参数类型的Class对象数组

            Class getReturnType()  //返回一个用于描述返回类型的Class对象

        9.2.3 设置访问授权 AccessibleObject.setAccessible(fields, true);

10 枚举值Enum

    比较枚举的值时,直接使用“==”,不用equals

    Enum valueOf(Class enumClass, Sting name)  //返回给定名字、给定类的枚举常量

    String toString()  //返回枚举常量名

原创粉丝点击