面向对象(继承)

面向对象(继承)

概念:

继承就是子类继承父类的特征和行为,使得子类对象(实例)具有父类的实例域和方法,或子类从父类继承方法,使得子类具有父类相同的行为

语法:

关键字:extends

继承的结果

1.子类拥有父类非 private 的属性、方法

2.子类可以拥有自己的属性和方法,即子类可以对父类进行扩展

为什么要使用继承

1.减少重复的代码,简化代码

2.提高代码的维护性

3.提高代码的复用性

注意点

1.使用继承,必须是具有"is a"的关系,不要因为想要复用代码而胡乱使用继承

2.子类中保存特性的属性和行为,父类中保存共性的属性和行为

3.继承可以多级继承(线性),但是不能多重继承(即一个类出现了两个直接的父类[c语言是可以的])

4.Java是单继承的,但是可以通过接口方式来实现多重继承
5.创建子类对象时会优先创建父类对象 通俗的来说创建子类对象的时候,会优先创建父类对象。(如下图所示)


Cat类继承了Animal类,然后我什么也都没写,我在测试类中创建子类(Cat)的对象cat,然后运行,可以发现它输出了在父类无参构造方法中的语句!!!,这就证实了创建子类对象时会优先创建父类对象,为什么这样说?因为创建对象就是调用构造方法啊!!!!,结果中都先输出的是父类Animal类的构造方法,所以就可以证明这句话了!!

同理如果我在Cat类中写一个有参数的构造方法,那么利用super关键字调用父类的有惨构造方法即可(注意调用构造时代码必须写在构造方法的第一行)如下图:


了解完以上总结的关于继承的知识点后,我们从实际的例子中来理解继承这个概念,首先我们由一张图联系我们的实际生活,来解释一下继承是什么意思:

通过这张图我们可以看出,动物是食草动物和食肉动物的总称,在Java中动物就属于食草动物和食肉动物的父类。我们通过代码来具体看看,继承有什么好处

在上面的代码中我们创建了一个猫类,一个狗类,定义了基本的私有属性,以及set方法和get方法,但是代码的重复率太大了,如果我们还想添加虫类,鸟类呢那就要重复的写,这大大地降低了效率,这时继承的优点就出来了,我们接着往下看:

我们定义了一个父类(Animal),将猫类,狗类都具有的属性都写在父类,这时我们可以看到猫类以及狗类只需要继承Animal类,就可以拥有父类非 私有 的属性、方法。从测试类中可以看出如果想要修改和访问私有属性只需要调用从父类中继承的非私有的set()方法和get()方法。大大的减少了代码的重复率。

上图测试类中我们可以看出,初始化对象的时候,如果想要设置属性就要不断的调用从父类中继承的非私有的set()方法和get()方法,这样代码量又增加了,这时我们联系前面的构造方法知识点,创建对象就是在调用构造方法,所以我们可以利用有参构造来简化代码,那么在子类继承父类后,创建有参构造方法有两个办法如下图:

如上所示:

方法一:

调用从父类中继承的非私有的set()方法

方法二:

super关键字:

表示调用父类中已经存在的某个构造方法,如果调用的是空参构造,则可以省略。

注意:调用构造时代码必须写在构造方法的第一行


最后还要提一下子类可以拥有自己的属性和方法,即子类可以对父类进行扩展,我们通过下面的代码来看:

总结

以上就是我对面向对象中继承的全部理解和感悟了,如果有什么不足欢迎指出,同时通过后面的学习我也会回过头来检查现在说的某些点是否不恰当,并且进行修改。

posted @ 2022-03-17 12:48  JanoCode  阅读(286)  评论(0)    收藏  举报