《java核心技术》基础知识篇学习笔记(二)
《java核心技术》基础知识篇学习笔记(二)
extends继承
1 | public class Manager extends Employee |
java的所有继承都是公有继承。
已存在的类被称为超类(superclass),基类(baseclass)或父类(parentclass);新类称为子类(subclass),派生类(derivedclass)或孩子类。
最一般的方法应该放在超类中。
覆盖方法(override)
子类调用超类的私有字段一般必须用超类写好的访问器。
子类有一个与超类同名的方法就是覆盖。
如果超类和子类都有一个相同名的方法,子类想调用超类的方法需要加super
1 | super.getSalary(); |
子类构造器
显式调用超类的构造器
1 | super(......) |
如果不显式调用超类的构造器,将调用超类的无参数构造器。如果啥都没有就等着java编译器报错吧。
回想一下
this有两种用途
- 引用隐式函数
- 调用此类的其他构造器。
super的
- 调用超类方法
- 调用超类的构造器
调用构造器的语句只能作为另外一个构造器的第一个语句。
此时可以调用this和super
java的动态绑定是默认行为,尽管变量是超类引用,但是用什么方法取决于他引用的对象。
如果不希望一个方法是虚拟的,应该加上final。
静态绑定的方法
- private方法
- static方法
- final方法
final操作符
如果某个特定方法被声明称final,子类就不能覆盖这个方法。
(final类中的所有方法自动成为final方法,不包括字段)
字段也可以被声明为final。
instance of操作符
检测是否能成功转换
返回true和false
只能在继承层次内进行强制类型转换
抽象类
规定一些子类必须要有的方法
包含抽象方法的类必须声明为抽象的
子类定义全部抽象方法就不是抽象类了。
抽象类不能实例化(不可以new)。
但可以定义一个变量。
但这个变量只能引用非抽象对象
访问限制
仅对本类可见—– private
对外部完全可见—– public
对本包和所有子类可见—- protected
对本包可见—–什么也不加
object 超类
object类型可以引用任何类型的对象
但如果想对其中的值进行操作,就必须进行强制转换
object类包含
- equal方法。
用于确定两个对象引用是否相同。
- hashcode方法
- toString方法
- getClass
- getName
- getSuperclass
泛型数组列表
ArrayList类(不能装基本数据类型)
它是有参数的泛型类。
1 | ArrayList<class> name = new ArrayList<Class>(); |
有以下方法
- Woolen add(E obj);
- int size();数量
- void ensureCapcity(int);给定足够的容量避免重新分配。
- Void trimToSize();削减至当前大小
访问需要用
E set(int index,E obj);
E get(int index)
void add(int index,E obj);插入到指定位置
E remove(int index);删除指定索引位置的元素。
自动装箱与对象包装器
装箱和拆箱是编译器要做的,而不是虚拟机。
包装器类是不可改变的。
方法
- int intValue();
- static String toString(int i, int radix);
- static int parseInt(String s,int radix);
- static Integer valueOf(String s);
声明异常入门
- 检查型
编译器会检查你是否做好应对这个异常的准备。
- 非检查型
严重错误,比如访问null引用,越界错误。
如果一个方法包含一条可能抛出检查型异常的语句,则在方法增加一个throws语句。
继承的技巧
- 公共操作和字段放在超类中
- 少用protected
- 除非所有继承的方法都有意义,否则不要使用继承。
- 在覆盖方法时,不要改变预期的行为。
接口
接口不是类,而是对希望符合这个接口的类的一组需求。
接口中所有方法都是public方法,无需提供关键字public。
接口中不会有实例字段。
为了让类实现一个接口需要做以下事情
- 将类声明为给定的接口
- 对接口中的所有方法提供定义
用implements关键字
接口也可以继承。
使用接口可以避免为实用工具方法提供一个类
解决默认方法冲突
- 超类优先
- 接口冲突
- 类优先