Java Note 3

Java 继承

Posted by JH on August 22, 2020

1.为什么要引入继承性?

  • 减少了代码的冗余,提高了代码的复用性

  • 便于功能的扩展

  • 为之后多态性的使用,提供了前提

2.继承性的格式

/*
A:子类、派生类、subclass
B:父类、超类、基类、superclass
 */
class A extends B{}

判断是否要进行继承:A is a B,若成立,则B继承A。为了允许继承,一般规则是所有字段为私有,所有方法为公共。

3.子类继承父类以后有哪些不同?

  • 子类A继承父类B以后,子类A中就获取了父类B中声明的所有的属性和方法。 特别的,父类中声明为private的属性或方法,子类继承父类以后,仍然认为获取了父类中私的结构。 只因为封装性的影响,使得子类不能直接调用父类的结构而已。

  • 子类继承父类以后,还可以声明自己特有的属性或方法:实现功能的拓展。 子类和父类的关系,不同于子集和集合的关系。

4.Java中继承性的说明

  1. 一个类可以被多个子类继承。
  2. Java中类的单继承性:一个类只能有一个父类
  3. 子父类是相对的概念。
  4. 子类直接继承的父类,称为:直接父类。间接继承的父类称为:间接父类
  5. 子类继承父类以后,就获取了直接父类以及所间接父类中声明的属性和方法
  6. 使用继承时,派生类具有基类接口,因此可以向上转型为基类

5.Object类

5.1 java.lang.Object类的理解

Java中所有类的父类,类似于二叉树中的根节点,定义了一些通用的方法。

  1. 如果我们没显式的声明一个类的父类的话,则此类继承于java.lang.Object类
  2. 所有的java类(除java.lang.Object类之外)都直接或间接的继承于java.lang.Object类
  3. 所有的java类具有java.lang.Object类声明的功能。
  4. java.lang.Object类中定义的一些方法
方法名 类型 描述
public Object() 构造方法 构造器
public boolean equals( Object obj) 普通方法 对象比较
public int hashCode() 普通方法 获取Hash码
public String toString() 普通方法 对象打印时调用

5.2 java.lang.Object类的说明:

  • 属性:无

  • 方法:equals(), toString(), getClass(), hashCode(), clone(), finalize(), wait(), notify(), notifyAll()

注意

  • Object类只声明了一个空参的构造器
  • 数组也作为 Object类的子类出现,可以调用 Object类中声明的方法

6.子类对象实例化全过程

子类继承父类以后,就获取了父类中声明的属性或方法。创建子类的对象,在堆空间中,就会加载所父类中声明的属性。

当我们通过子类的构造器创建子类对象时,我们一定会直接或间接的调用其父类的构造器, 进而调用父类的父类的构造器,…直到调用了java.lang.Object类中空参的构造器为止。 正因为加载过所的父类的结构,所以才可以看到内存中父类中的结构,子类对象才可以考虑进行调用。

虽然创建子类对象时,调用了父类的构造器,但是自始至终就创建过一个对象,即为new的子类对象。