第9章 继承和多态

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 Throwableprotected native Object clone() throws CloneNotSupporteExceptionpublic 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()方法返回它的元对象。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值