《java核心技术》基础知识篇学习笔记(二)

extends继承

1
2
3
4
public class Manager extends Employee 
{
added methods and fieds
}

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关键字

接口也可以继承。

使用接口可以避免为实用工具方法提供一个类

解决默认方法冲突

  • 超类优先
  • 接口冲突
  • 类优先