`

Java核心技术卷I -- 第5章 继承

F# 
阅读更多

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()  //返回枚举常量名

分享到:
评论

相关推荐

    Java核心技术 卷I(原书第8版).Part1 pdf

    第5章 继承 第6章 接口与内部类 第7章 图形程序设计 第8章 事件处理 第9章 Swing用户界面组件 第10章 部署应用程序和applet 第11章 异常、日志、断言和调试 第12章 泛型程序设计 第13章 集合 第14章 多线程

    Java核心技术 卷I(原书第8版).part2 PDF

    第5章 继承 第6章 接口与内部类 第7章 图形程序设计 第8章 事件处理 第9章 Swing用户界面组件 第10章 部署应用程序和applet 第11章 异常、日志、断言和调试 第12章 泛型程序设计 第13章 集合 第14章 多线程

    Java2核心技术.part5

    Java2核心技术第I卷.基础知识 目录: 译者序 前言 第1章Java程序设计概述 1.1 Java程序设计平台 1.2 Java“白皮书”的关键术语 1.2.1简单性 1.2.2面向对象 1.2. 3分布式 1. 2.4健壮性 1. 2.5安仝...

    Core Java. Volume I. Fundamentals, 8th Edition JAVA核心技术1基础知识

    第5章 继承 第6章 接口与内部类 第7章 图形程序设计 第8章 事件处理 第9章 Swing用户界面组件 第10章 部署应用程序和applet 第11章 异常、日志、断言和调试 第12章 泛型程序设计 第13章 集合 第14章 多线程

    Java2核心技术.part3

    Java2核心技术第I卷.基础知识 目录: 译者序 前言 第1章Java程序设计概述 1.1 Java程序设计平台 1.2 Java“白皮书”的关键术语 1.2.1简单性 1.2.2面向对象 1.2. 3分布式 1. 2.4健壮性 1. 2.5安仝...

    Java2核心技术.part1

    Java2核心技术第I卷.基础知识 目录: 译者序 前言 第1章Java程序设计概述 1.1 Java程序设计平台 1.2 Java“白皮书”的关键术语 1.2.1简单性 1.2.2面向对象 1.2. 3分布式 1. 2.4健壮性 1. 2.5安仝性 1. 2.6...

    Java2核心技术.part6

    Java2核心技术第I卷.基础知识 目录: 译者序 前言 第1章Java程序设计概述 1.1 Java程序设计平台 1.2 Java“白皮书”的关键术语 1.2.1简单性 1.2.2面向对象 1.2. 3分布式 1. 2.4健壮性 1. 2.5安仝...

    Java2核心技术.part4

    Java2核心技术第I卷.基础知识 目录: 译者序 前言 第1章Java程序设计概述 1.1 Java程序设计平台 1.2 Java“白皮书”的关键术语 1.2.1简单性 1.2.2面向对象 1.2. 3分布式 1. 2.4健壮性 1. 2.5安仝...

    Java2核心技术.part2

    Java2核心技术第I卷.基础知识 目录: 译者序 前言 第1章Java程序设计概述 1.1 Java程序设计平台 1.2 Java“白皮书”的关键术语 1.2.1简单性 1.2.2面向对象 1.2. 3分布式 1. 2.4健壮性 1. 2.5安仝...

    Java优化编程(第2版)

    第4章 java核心类与性能优化 4.1 散列表类与性能优化 4.1.1 线程同步散列表类 4.1.2 设置arraylist初始化容量 4.1.3 arraylist与linkedlist 4.2 string类与性能优化 4.2.1 字符串累加与性能优化 4.2.2 字符串的...

    新版Android开发教程.rar

    � Google 提供了一套 Java 核心包 (J2SE 5,J2SE 6) 的有限子集,尚不承诺遵守 Java 任何 Java 规范 , 可能会造 成J ava 阵营的进一步分裂。 � 现有应用完善度不太够,需要的开发工作量较大。--------------------...

    day01.环境变量,HelloWorld,常量

    - **第五部分:MySQL/JDBC核心技术:**`SQL语句`、`数据库连接池`、`DBUtils`、`事务管理`、`批处理`、 今日重点: 1.安装jdk 2.会配置环境变量 3.会常用的dos命令 4.会编写helloworld 5.会使用注释对代码进行...

    Java 语言基础 —— 非常符合中国人习惯的Java基础教程手册

    (每分钟 90 转),当前传动装置是第 5 个齿轮。再面向对象的程序设计中,这些数据应放在 变量中。自行车的行为:刹车,改变步度和换档。在面向对象的程序设计中,这些行为用方 法实现。 在 OOP 技术中,对象充当了...

    java 面试题 总结

    JAVA相关基础知识 1、面向对象的特征有哪些方面 1.抽象: 抽象就是忽略一个主题中与当前目标无关的那些方面,以便更充分地注意与当前目标有关的方面。抽象并不打算了解全部问题,而只是选择其中的一部分,暂时不用...

    JavaScript权威指南(第六版) 清晰-完整

    第5章 语句 5.1 表达式语句 5.2 复合语句和空语句 5.3 声明语句 5.4 条件语句 5.5 循环 5.6 跳转 5.7 其他语句类型 5.8 JavaScript语句小结 第6章 对象 6.1 创建对象 6.2 属性的查询和设置 6.3 删除属性 6.4 检测...

    整理后java开发全套达内学习笔记(含练习)

    Inheritance [java] 继承 [in'heritәns] (遗传,遗产) initialize 预置 初始化 [i'niʃәlaiz] instanceof (关键字) 运算符,用于引用变量,以检查这个对象是否是某种类型。返回 boolean 值。 interface (关键字) ...

    超级有影响力霸气的Java面试题大全文档

    超级有影响力的Java面试题大全文档 1.抽象: 抽象就是忽略一个主题中与当前目标无关的那些方面,以便更充分地注意与当前目标有关的方面。抽象并不打算了解全部问题,而只是选择其中的一部分,暂时不用部分细节。...

Global site tag (gtag.js) - Google Analytics