本章主要介绍一下java的三大特征之——继承
继承
说到继承,我们就先看看字面意识
以下是百度百科找的
继承,汉语词语,意为按照法律或遵照遗嘱接受死者的财产、职务、头衔、地位等。
释义:
依法承受(死者的遗产等):~权|~人。
泛指把前人的作风、文化、知识等接受过来:~优良传统|~文化遗产。
后人继续做前人遗留下来的事业:~先烈的遗业。
其实这些不看大家都知道,继承就是“子继承父”的关系
继承实现
继承在 java 中通过 extends 来体现,如下代码中
class A{} class B extends A{} class C extends B{}
类A为类B的父类 (也称类A为类B的超类)
类B为类A的子类 为类C的父类(也称类B为类C的超类)
类C为类B的子类
理解继承
extends
翻译过来的意思是:扩大;扩展;使增加长度,以下是剑桥字典对其解释
to add to something in order to make it bigger or longer
添加到某些内容中以使其更大或更长class A{} class B extends A{} //B类添加到A类中使其更特定,更完整
说了这么多,我们将继承具象化一点;
假设 A 类为 Animal 类,B 类为 Cat 类
class Animal{} class Cat extends Animal{}
我们可以说 Cat 类 添加到 Animal 类中某些内容,使得 Cat 类更加的特定
还是很抽象
我们再通过一个例子来看一下
现在有以下几个类:
猫(Cat),狗(Dog),狮(Lion),狼(Wolf)
我们讨论一下
Cat 能继承 Animal 吗,Dog 呢,Loin 呢,Wolf 呢
当然能。
我们能细分一下吗:
比如猫科(Felidae),犬科(Canidae)?
那Cat能继承Felidae(猫科)吗,Dog 呢,Loin 呢,Wolf 呢
犬科(Canidae)呢
代码如下:
class Animal{/*动物类*/} class Felidae extends Animal{/*猫科动物,继承动物类*/} class Canidae extends Animal{/*犬科动物,继承动物类*/} class Cat extends Felidae{/*猫,继承猫科动物*/} class Dog extends Canidae{/*狗,继承犬科动物*/} class Loin extends Felidae{/*狮子,继承猫科动物*/} class Wolf extends Canidae{/*狼,继承犬科动物*/}
继承的属性和方法
通过idea演示
Animal 类中有 name 属性和 eat() 方法
Cat
在子类 Cat中并未定义 name 属性和 eat() 方法,但我还是可以调用eat() 方法,获取 name 属性,可看出,属性和方法也是可以继承下去的。
重写
重写就是把父类中的方法重新写一遍,运行时是以子类的方法运行的
重写和重载的区别
重写发生在子类与父类之间,重载发生在一个类中(不止是这些)
IS-A 和 HAS-A
能否继承是否有标准呢,这个答案是是的,它是有这个标准的,这个标准就是IS-A
以上述举例:
Cat 和 Animal 之间的关系
Cat IS A Animal,猫是动物,这句话是成立的
还可以举出很多例子,如
狗是犬科动物
苏格拉底是人
汽车是代步工具等等
这些都是可以继承的
像名字和猫之间的关系
你只能说猫有名字,而不是名字是猫
就是Cat HAS-A Name
因此 Name可以作为Cat的属性
见此章结。