继承

类、超类(父类)和子类

  1. 定义子类
    使用关键字extends表示继承。
  2. 覆盖方法
    子类可以重写父类中已经定义过的方法
    子类调用超类中的方法使用super关键字
  3. 子类构造器
    super(); 调用父类构造器
  4. 继承层次
    由一个公共超类(父类)派生出来的所有类的集合被称为继承层次。
  5. 多态
    一个父类变量既可以引用一个父类对象,也可以引用任何一个子类的对象。
  6. 方法的调用
    1) 编译器查看对象的声明类型和方法名
    2) 接下来,编译器将查看调用方法时提供的参数类型
    3) 如果是private方法、static方法、final方法或者构造器,那么编译器将可以准确地知道应该调用哪个方法,我们将这种调用方式称为静态绑定
    4) 当程序运行时,并且采用动态绑定调用方法时,虚拟机一定调用与x所引用对象的实际类型最合适的那个类的方法。
  7. 阻止继承:final类和方法
    使用final修饰符修饰的类不允许被扩展。
    final修饰的方法不允许在子类中被扩展。
  8. 强制类型转换
  • 只能在继承层次内进行类型转换
  • 在将超类转成子类之前,应该使用instanceof进行检查
  1. 抽象类
  • 抽象类使用abstract关键字来声明
  • 抽象类不能被实例化
  1. 受保护访问
    protected
    Java中的4个访问修饰符
    1) private - 仅对本类可见
    2) public - 对所有类可见
    3)protected - 对本包和所有子类可见
  1. 无(没有修饰符) - 对本包可见

Object:所有类的超类

Object类是Java中所有类的始祖,在Java中每个类都是由它扩展而来的。
在Java中,只有基本类型不是对象,其余的全部扩展自Object类。

  1. equals方法
    在Object类中,这个方法将判断两个对象是否具有相同的引用。如果两个对象具有相同的引用,它们一定是相等的。
  2. 相等测试与继承
    Java语言规范要求equals方法具有以下五点特性:
    1)自反性:对于任何非空引用x,x.equals(x)应该返回true
    2)对称性:对于 任何引用x和y,当且仅当y.equals(x)返回true,x.equals(y)也返回true
    3)传递性:对于任何引用x、y、和z,如果x.equals(y)返回true,y.equals(z)返回true,x.equals(z)也应该返回true
    4)一致性:如果x和y引用的对象没有发生变化,反复调用x.equals(y)应该返回同样的结果
    5)对于任何非空引用x,x.equals(null)应该返回false
  3. hashCode方法
    如果重新定义equals方法就必须重新定义hashCode方法。
  4. toString方法

泛型数组列表

Java允许在运行时确定数组的大小

  1. 访问数组列表元素
    ArrayList 只能使用get()方法来调用对应的下标
  2. 类型化与原始数组列表的兼容性
    可以接受不带泛型的参数,不过编译器会给出警告

对象包装与自动装箱

Java为每个基本类型都提供了相应的包装类型。
将int类型的3包装为Integer类型的3就可以使用Integer.valueOf(3);
不过编译器也会自动完成装箱的操作, 拆箱与装箱道理相同。

参数数量可变的方法

可变参数方法的定义: public PrintStream printf(String fmt, Object... args)...
其中的...(省略号) 就定义了一个可变参数。

枚举类

在比较两个枚举类时,永远不需要调用equals,而直接使用“==”就可以了

反射(这部分的内容专门抽时间来写)

继承的设计技巧

  1. 将公共操作和域放在父类中
  2. 不要使用受保护的域
  3. 使用继承实现"is-1"关系
  4. 除非所有继承的方法都有意义,否则不要使用继承
  5. 在覆盖方法时,不要改变预期的行为
  6. 使用多态,而非类型信息
  7. 不要过多地使用反射

你可能感兴趣的:(继承)