1.子类从它的父类中继承可访问的数据域和方法,也可以添加新数据域
和新方法。
2.关键字super指向使用它的类的父类,关键字super可以用于两种途径:
- 调用父类的构造方法。
- 调用父类的方法。
3.调用父类构造方法的语法是:
super();
或super(参数);
- 语句super()调用父类的无参构造方法,语句super(参数)调用与参数匹配的父类构造方法。
- 语句super()和super(参数)必须出现在子类构造方法的第一行,而且这是调用父类构造方法的唯一方式。
- 调用父类的构造方法必须使用关键字super,并且这个调用必须是构造方法的第一条语句。
4.在任何情况下,构造一个类的实例时,将会沿着继承链调用所有父类的构造方法,父类的构造方法在子类的构造方法之前调用,这叫做构造方法链(constructor chaining)。
5.关键字super不仅可以引用父类的构造方法,也可以引用父类的方法法,所用语法如下:
super.方法名(参数);
6.子类必须修改父类中定义的方法,这叫做方法覆盖(method overriding)。父类中的私有数据域和方法在该类的外面不能引用,因此它们不能被子类继承
与实例方法一样,静态方法也能继承。但是,静态方法不能覆盖。如果父类中定义的静态方法在子类中重新定义,父类的方法将被隐藏。
7.重载方法就是提供多于一个方法,这些方法有相同的名字但签名不同。覆盖方法就是在子类中定义一个方法,该方法与父类中方法使用相同的签名,并且返回值类型也相同。
8.Java中的每个类都源于java.lang.Object类。如果一个类在定义时没有指定继承,它的父类默认是Object。
9.继承关系使一个子类继承父类的特征,并附加新特征。子类是父类的某种专门化,每个子类的实例都是父类的实例,但是反过来不行。
10.多态性、动态绑定和一般程序设计
采用哪一种实现由Java虚拟机在运行时动态决定,这种能力称为动态绑定(dynamic binding),也称为多态性(polymorphism)(源于一个希腊单词,意为“多种形式”),因为一种方法有多种实现。
11.匹配方法的签名和绑定方法的实现是两项独立的任务。引用变量的声明类型决定编译时哪个方法匹配。编译时,编译器根据参数类型、参数个数和参数顺序匹配方法。一个方法可能在几个子类中实现,Java虚拟机在运行时动态绑定方法的实现,由变量引用的对象的实际类决定。
12.动态绑定是指新类不必重新编译就能装入。开发者不必创建,用户不用安装、修订新的软件版本。如果需要新的特征,可以透明地加入。
13.多态性一般允许方法使用范围更广的对象参数,这称为一般程序设计(generic programming)。
14.对象转换和instanceof运算符
转换也可以用来把一个类的对象转换为继承层中的另一个对象。
将一个子类的实例转换为一个父类的变量总是可行的,称为向上转换(upcasting),因为子类的实例永远是父类的实例。把父类实例转换为它的子类变量,称为向下转换(downcasting),必须使用转换记号(子类名)进行显式转换,向编译器指明你的目的。为使转换成功,必须确保转换的对象是子类的一个实例。如果父类对象不是子类的一个实例,会发生实时异常ClassCastException。
15.在Java关键字中,每个字母都是小写。
16.对象成员访问运算符(.)优先于类型转换运算符。使用括号保证在点(.)运算符之前转。
17.数组线性表ArrayList类
可以创建数组存储对象,但是,一旦数组创建后,它的大小就固定了。Java提供了ArrayList类用于存储不限个数的对象。
18.自定义栈类
可以使用ArrayList实现Stack。
19.子类可以覆盖父类的protected方法,并把它的可见性改为public。但是,子类不能降低父类中定义的方法的可访问性。
20.修饰符
- 使用protected修饰符允许任何包中的子类或同一包中的类访问类的成员。使用public修饰符允许任何类访问类的成员。
- 如果想让该类的用户都使用类的成员,把它们声明成public成员。
- 如果想让该类的扩展者使用数据和方法,而不想让该类的用户使用,则把它们声明成protected成员。
21.在这种情况下,用final修饰符说明一个类是终极的,不能做父类。
也可以把一个方法定义为终极的,终极方法不能被它的子类覆盖。
修饰符用在类和类的成员(数据和方法)上,只有final修饰符还可以用在方法中的局部变量上。方法内的终极局部变量就是常量。
22.对象类Object中的方法
• public boolean equals(Object object)
• public int hashCode()
• protected void finalize() throws Throwable
• protected native Object clone() throws CloneNotSupporteException
• public final native Class getClass()
(1)equals方法
equals方法检验两个对象是否相等。
(2)hashCode方法
调用对象的hashCode()返回该对象的散列代码。散列码(hash code)是一个整数,用于在散列集合中储存并能快速查找对象。
(3)finalize方法
当对象变成垃圾时,finalize方法会被该对象的垃圾回收程序调用。如果一个对象不再能被访问,就变成了垃圾。默认情况下,finalize方法不做任何事。如果必要,子类应该覆盖finalize方法,释放系统资源或进行其他清洁工作。
finalize方法是由Java虚拟机调用的,在自己的程序中不要书写任何调用该方法的代码。正是这个原因,用protected修饰符比较合适。
(4)clone方法
要创建一个有单独内存空间的新对象,使用clone()方法不是所有的对象都可以克隆。要成为一个可克隆的对象,它的类必须实现java.lang.Cloneable接口。
(5)getClass方法
通过元对象,可以在运行时得到类的信息。每个对象都可以使用getClass()方法返回它的元对象。