Java核心技术 卷1 第五章总结

这本书的第五章主要探讨Java中的继承机制,还阐述了反射(reflection)的概念(我打算另写一篇文章说明,还没想好怎么写。。)。

1.Java用关键字extends表示继承。在Java中,所有的继承都是公有继承,而没有C++中的私有继承和保护继承。

2.超类(superclass)和子类(subclass)是Java程序员最常用的两个术语。

3.子类可以覆盖(override)超类中的同签名方法。此时,如果要调用父类中的同名方法,就要用super关键字来调用。

4.子类中不能直接访问超类的私有成员。

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

6.因为子类不能访问超类中的私有域,所以必须利用超类的构造方法来初始化这些私有域。于是,我们可以通过super实现对超类构造器的调用z(直接写super(......))。使用super调用构造器的语句必须是子类构造器的第一条语句!其实,如果没有显式地通过super调用超类的构造器,则将默认自动的调用超类没有参数的构造器。

7.关键字this的两个用途:一是引用隐式参数,二是调用该类的其他构造器。

   关键字super的两个用途:一是调用超类的方法,二是调用超类的构造器。

   因为调用构造器的语句只能作为另一个构造器的第一条语句出现(成员方法不能调用构造器,而构造器能调用成员方法),所以第一句只能用this调用本类的其他构造器或者通过super调用超类的其他构造器。但是两个不能同时共存。

8.一个对象变量可以指示多种实际类型(即多种子类)的现象被称为多态。在运行时能够自动地选择调用哪个方法的现象称为动态绑定。

9.在Java中,不需要将方法声明为虚拟方法。动态绑定是默认的处理方式。

10.Java中不支持多继承,相同的功能通过接口机制来实现。

11.在Java中,子类数组的引用可以转换成超类数组的引用,而不需要采用强制类型转换。

12.关于动态绑定的内容我另写一篇详细说明。

13.可以使用final关键字来修饰类来阻止定义这个类的子类。

14.可以使用final关键字来修饰方法来阻止子类中覆盖这个方法。注意,别说覆盖了,隐藏都不行,即只要声明签名相同的方法就报错。

15.如果将一个类声明为final,那么其中的方法自动成为final,而不包括域。

16.Java中的强制类型转换语法很简单,与C语言一样,就是一对括号()。其实,Java的强制类型转换更像C++中的dynamic_cast操作,只不过在运行时,如果JVM发现不能如此转换就会抛出一个ClassCastException异常。因此,为了实现安全强制转换,要使用instanceof操作符。

17.包含一个或多个抽象方法的类本身必须被声明为抽象的。还有,类即使不含抽象方法,也可以将类声明为抽象类。

18.对于protected修饰符,作用是让本包和所有的子类可见。例如Employee类是Manager类的超类。Manager类能直接访问Manager类中的超类的protected修饰的域和方法。但是不能直接访问Employee类中的这些域。这种限制有助于避免滥用受保护机制(protected),使得子类只能获得访问受保护域的权利。

   下面归纳一下Java中用于控制可见性的4个访问修饰符:

  •     仅对本类可见——private
  •     对所有类可见——public
  •     对本包和子类可见——protected
  •     对本包可见——默认,不需要修饰符

19.Object类是Java中所有类的始祖。如果没有明确地指明超类,Object就被认为是这个类的超类。

20.在Java中,只有基本数据类型(primitive types)不是对象。所有的数组类型,不管是对象数组还是基本数据类型的数组都是对象,因此也都扩展于Object类。

21.因为Java没有运算符重载机制,所以对于ArrayList只能使用get和set方法实现访问和改变数组元素的操作,而不能使用平常的       [ ]语法格式。

22.对于ArrayList,只能使用add方法为数组添加新元素,而不要使用set方法,它只能替换数组中已经存在的元素内容。

23.在Java中,每个基本类型都有一个与之对应的类。这些类称为包装器。这些包装器类是不可变的,即不能改变其内部的值,而且还是final的。

24.Java泛型中的类型参数不允许是基本类型,因此对于整数数组,就只能用Integer类。

25.将基本类型赋值给对应包装器会发生自动装箱。将包装器赋值给对应的基本类型就会发生自动拆箱。

26.因为在JVM内部所有的ArrayList都是原始的ArrayList对象。即没有什么类型参数。因此类型转换(ArrayList)和(ArrayList<Integer>)将执行相同的运行时检查,也就是会报相同的警告。

27.Java中参数数量可变的语法形式是(Object...args),即三个点。这个实质上是传入了一个Object数组,即Object[] args。在方法里可以直接将args当做数组来使用。

28. 在Java中,定义的枚举类型实际上是一个类,这个类就只有这么几种实例。于是,可以往枚举类型中添加一些构造器、方法和域。还有,所有的枚举类型都是Enum类的子类。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值