Java零基础快速入门|继承

本篇文章主要内容
继承概述
如何继承
继承的相关特性
对继承自Object 类的方法的测试
难点疑惑
学习目标
了解继承在java 中有什么作用,以及在代码上如何实现继承。
知识框架

继承
继承概述
继承是面向对象三大特征之一,封装居首位,封装之后形成了独立体,独立体 A 和独立体B 之间可能存在继承关系。其实程序中的继承灵感来自于现实生活,在现实生活中继承处处可见,例如,儿子继承了父亲的财产,儿子不需要努力就很有钱。
生活中的继承:

继承时子类继承父类的特征和行为,使得子类对象(实例)具有父类的属性,或子类从父类继承方法,使得子类具有与父类相同的行为。兔子和羊属于食草动物类,狮子和豹属于食肉动物类。食草动物和食肉动物又是属于动物类。所以继承需要符合的关系是:is-a(Bird is-a Animal),父类更通用,子类更具体。虽然食草动物和食肉动物都是属于动物,但是两者的属性和行为上有差别,所以子类会具有父类的一般特性也会具有自身的特性。
为什么要使用继承机制?在不同的类中也可能会有共同的特征和动作,可以把这些共同的 特征和动作放在一个类中,让其它类共享。因此可以定义一个通用类,然后将其扩展为其它多 个特定类,这些特定类继承通用类中的特征和动作。继承是 Java 中实现软件重用的重要手段, 避免重复,易于维护。
如何继承
Java 中继承的语法格式:

为什么需要继承,接下来我们用以下这个需求来说明一下:


以上两个类分别描述了“银行账户类”和“信用账户类”,信用账户类除了具有银行账户类的特征之外还有自己的特性,按照以上代码的编写方式,程序将会非常的臃肿,我们将上面的程序修改为继承方式,请看代码:



运行结果如下图所示:

通过以上的代码,我们可以看到继承可以解决代码臃肿的问题。换句话说,继承解决了代码复用的问题(代码复用就是代码的重复利用),这是继承机制最基本的作用。
继承的作用中除了可以让代码复用之外,还有非常重要的两个作用,那就是有了继承之后才会衍生出方法的覆盖和多态机制。这两个作用我们在后续的课程中会详细讲解。目前先理解一下继承可以做到代码复用的效果。
继承的相关特性
那么,对于Java 的继承有哪些特性需要大家理解和记忆呢?我来罗列一下:
① B 类继承A类,则称 A类为超类(superclass)、父类、基类,B 类则称为子类(subclass)、派生类、扩展类。
② java 中的继承只支持单继承,不支持多继承,C++中支持多继承,这也是 java 体现简单性的一点,换句话说,java 中不允许这样写代码:class B extends A,C{ }。
③ 虽然 java 中不支持多继承,但有的时候会产生间接继承的效果,例如:class C extends B,class B extends A,也就是说,C 直接继承B,其实C 还间接继承A。
④ java 中规定,子类继承父类,除构造方法和被private 修饰的数据不能继承外,剩下都可以继承。
⑤ java 中的类没有显示的继承任何类,则默认继承Object 类,Object 类是java 语言提供的根类(老祖宗类),也就是说,一个对象与生俱来就有Object 类型中所有的特征。
⑥ 继承也存在一些缺点,例如:CreditAccount 类继承 Account 类会导致它们之间的耦合度非常高,Account 类发生改变之后会马上影响到CreditAccount 类。
对继承自Object 类的方法的测试
接下来我们来测试一下从Object 类中继承过来的方法,先来看一下Object类的部分源代码:
图 12-3:Object 类中toString()方法源代码我们来尝试调用这个方法,请看代码以及执行结果:

运行结果如下图所示:

虽然输出结果看不懂,但是起码看到这个字符串当中确实是有一个“@”符号的,toString() 方法确实被ExtendsTest 类继承过来了。
难点解惑
对于本章节内容来说,难点主要是类和类继承之后的代码执行顺序,请看程序:

我们对以上的程序进行分析,子类 H2 继承 H1,new H2()执行的时候,会先进行类加载, 先加载 H2 的父类 H1,所以 H1 当中的静态代码块先执行,然后再执行 H2 中的静态代码块, 静态代码块执行结束之后,不会马上执行构造方法,代码块会先执行,Java 中有一条规则:子类构造方法执行前先执行父类的构造方法(学习 super 之后大家就知道了),所以父类 H1 的代码块先执行,再执行 H1 的构造方法,然后再执行 H2 的代码块,最后执行 H2 的构造方法。我们对以上程序进行编译并运行,请看下图结果:

通过以上的测试结果,可以看出以上我们的分析是正确的。
小结
通过本章节的学习,要求大家理解什么是继承,为什么要继承,继承有什么好处,继承的特性有哪些。另外要求大家掌握的是继承的代码如何实现。还有 Java 中任何一个类的定义都会自带Object 类的特征,这是因为Object 是所有类的超类。
最后附Java零基础视频教程给大家,配合学习效果更佳!!

