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() //返回枚举常量名
- JAVA2核心技术卷I:基础知识(原书第7版) -- 第5章. 继承
- JAVA2核心技术卷I:基础知识(原书第7版) -- 第3章. Java基本程序结构
- JAVA2核心技术卷I:基础知识(原书第7版) -- 第4章. 对象与类
- JAVA2核心技术卷I:基础知识(原书第7版) -- 第6章. 接口和内部类
- JAVA2核心技术卷I:基础知识(原书第7版) -- 第11章. 异常与调试
- JAVA2核心技术卷I:基础知识(原书第7版) -- 第12章. 流与文件
- JAVA2核心技术卷I:基础知识(原书第7版) -- 第13章. 泛型程序设计
- JAVA2核心技术卷I:基础知识(原书第7版) -- 第1章. Java程序设计概述,第2章. Java程序设计环境
- 最新Java2核心技术卷I:原理(原书第5版)
- JAVA2核心技术卷II:高级特性(原书第7版) -- 第5章. 分布式对象
- 读《Java2核心技术<卷Ⅰ>基础知识(第6版)》
- JAVA2核心技术卷II:高级特性(原书第7版) -- 第1章. 多线程
- JAVA2核心技术卷II:高级特性(原书第7版) -- 第2章. 集合
- JAVA2核心技术卷II:高级特性(原书第7版) -- 第3章. 网络
- JAVA2核心技术卷II:高级特性(原书第7版) -- 第4章. 数据库编程
- JAVA2核心技术卷II:高级特性(原书第7版) -- 第9章. 安全
- JAVA2核心技术卷II:高级特性(原书第7版) -- 第10章. 国际化
- JAVA2核心技术卷II:高级特性(原书第7版) -- 第11章. 本地方法
- Struts2的Collection和Map支持
- 解决在url中传递js变量到java程序中出现乱码问题(转自http://www.blogjava.net/fine)
- 打开QQ对话
- onmouseover, onmouseout的触发顺序问题
- 怎么成为优秀的软件模型设计者?
- JAVA2核心技术卷I:基础知识(原书第7版) -- 第5章. 继承
- IOC容器的经典解释
- 笑侃人生
- asp可用下列函数截取字符串
- 马云对创业者的经典点评
- 时间变量问题
- 领悟 JavaScript 中的面向对象
- 使用PNG实现半透明的窗体
- JAVA2核心技术卷I:基础知识(原书第7版) -- 第6章. 接口和内部类