5.继承

来源:互联网 发布:电脑看电视直播软件 编辑:程序博客网 时间:2024/06/16 18:11

super 与this:super不是一个对象的引用,不能将super赋给另一个对象变量,只是一个指示编译器调用超类方法的特殊关键字

this用途:一、引用隐式参数。二调用该类的其他构造器

super用途:一、调用超类的方法。二调用超类构造器


使用super调用构造器的语句必须是子类构造器的第一条语句。

this 也 作为第一条





Manager[] managers = new Manager[10];


Employee[] staff = managers; // OK


staff[0] = new Employee("Harry Hacker", ...);   


在调用方法时可能    ArrayStoreException.



对象变量是多态的


动态绑定(重载解析,在所有方法中找,没找到或者经类型转换有多个,报错)


覆盖方法时,允许返回类型是原返回类型   子类型,访问权限不能低于原权限


将类声明为final ,其中的方法自动成为final,但不包括域


final 方法,子类不能覆盖(可用于优化,内联)

虚拟机在此也做了优化。检测继承中是否真正覆盖


x instanceof C
does not generate an exception if x is null. It simply returns false.



类即使不含抽象方法,也可声明为abstract ,禁止这个类实例化


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



基本类型不是对象!

数组扩展于Object


使用util包中的Objects.equals(a,b)判断是否相同,都为null,相同


java语言规范要求equals方法具有下面特性:

  • 自反性
  • 对称性
  • 传递性
  • 一致性
  • 对于任意非空引用x,x.equals(null)应该返回false


如果子类能够拥有自己的相等概念,则对称性需求将强制采用getClass进行检测

如果由超类决定相等的概念,就可以使用instanceof 进行检测



equals 方法应该与hashCode方法一致。


5.3泛型数组列表

ArrayList,在添加或删除元素时,具有自动调节数组容量的功能。


ArrayList<Employee> list = new ArrayList<>(100); // capacity 100, size 0
list.set(0, x); // no element 0 yet

5.4 对象包装器与自动装箱

对象包装器类   是 final类;



如果想修改参数值的方法,借助于org.omg.CORBA包中的类型  *Holder


5.5 参数数量可变的方法


5.6 枚举类型

所有枚举类型都是Enum类的子类。

在枚举类型中可以有构造器,方法,域


5.7 反射

运行时类信息


获得类对象:

  1. Date d =new Date();  Class c=d.getClass();
  2. Class c= Class.forName("java.util.Date")
  3. d.class

java.lang.reflect.Constructor 1.1
• Object newInstance(Object[] args)


AccessibleObject.setAccessible(fields, true);


java.lang.reflect包中的Array类允许动态创建数组。



要得到数组元素类型

int [] i={1,2,3}

i.getClass()   //返回[ I

判断是否为数组

获得元素类型:i.getClass() .getComponentType();



int[] 可以转换为Object  但不能转换为对象数组


public static Object goodCopyOf(Object a, int newLength){<span style="white-space:pre"></span>Class cl = a.getClass();<span style="white-space:pre"></span>if (!cl.isArray()) return null;<span style="white-space:pre"></span>Class componentType = cl.getComponentType();<span style="white-space:pre"></span>int length = Array.getLength(a);<span style="white-space:pre"></span>Object newArray = Array.newInstance(componentType, newLength);<span style="white-space:pre"></span>System.arraycopy(a, 0, newArray, 0, Math.min(length, newLength));<span style="white-space:pre"></span>return newArray;}
java.lang.reflect.Method 1.1• public Object invoke(Object implicitParameter, Object[] explicitParameters)


public static Object goodCopyOf(Object a, int newLength){Class cl = a.getClass();if (!cl.isArray()) return null;Class componentType = cl.getComponentType();int length = Array.getLength(a);Object newArray = Array.newInstance(componentType, newLength);System.arraycopy(a, 0, newArray, 0, Math.min(length, newLength));return newArray;}

0 0