专栏首页零基础自学Java【Java】基础16:一个例子弄懂什么叫继承?

【Java】基础16:一个例子弄懂什么叫继承?

面向对象三大特性:封装,继承、多态。

继承用一句话总结就是:父亲可以有很多儿子,但儿子只能有一个亲爹。

继承描述的是事物之间的所属关系。看下图:

动物是一个类,食草动物、食肉动物也是一个类。

其中羊属于食草动物,食草动物又属性动物。

所以动物是一个类;食草动物、食肉动物都是动物的子类;羊类、兔类是食草动物的子类;狼类、虎类是食肉动物的子类。

那这些包含与被包含的关系在程序里又是怎么处理的呢?

这就要提到继承了。

程序有一个特别大的魅力,就是在于它能描述现实世界

以前我们买东西用现金一手交钱一手交货,现在支付宝微信直接就可以转账,它的底层不就是一行行的代码组成的程序么?这就是用程序描述现实世界里用钱买东西的行为,并且它还能不断地迭代不断地优化。

无人驾驶也是一样的道理,只不过现在技术还不算完善,需要更进一步地优化。

话说回来,程序里继承关系是如何体现的?

一、继承的格式

看如下代码:

通过 exends关键字,就可以声明一个子类继承另外一个父类。

继承特点一

Java支持多层继承,兔类继承食草动物,食草动物继承动物( 爷爷类,爸爸类,可以统称为父类,超类)

子类和父类是一种相对的概念:食草动物是兔类的父类,但又是动物类的子类。

继承特点二:

一个子类的父类是唯一的, 但是一个父类可以有多个子类。

用现代化的语言理解就是:父亲可以有很多个儿子,但是儿子只能有一个父亲。

继承的作用在于可以让子类基于父类的功能和属性进一步扩展。

属性也就是类的成员变量;功能也就是类的成员方法。

二、继承的成员变量(不重名)

比如:动物都有其对应的名字,兔子有一个额外的属性就是耳朵长度。

代码如下:

三、继承的成员变量(重名)

比如说:在一个动物园中,动物都有一个总的对应编号,其中兔类也有自己类的编号,羊类也有自己类的编号,这样变量名就重名了,这该怎么办?

代码如下:

这里面使用了两个关键字:superthis

  • super是用来修饰父类成员变量,用(super.成员变量)就可以直接调用父类中的变量。
  • this的意思是谁调用它,它就是谁。用的是rabbit对象调用的它,所以它就是指的Rabbit这个类。

思考:为什么要加上super和this?

因为变量名重名了,都叫number,程序只会调用离他最近的那个。

若是在图中show()方法里面,还有一个变量也叫number(这是一个局部变量),程序会优先调用它。其次才是本类中的变量,最后才是父类中的变量。

所以要加上super和this以便区别。

其实这才是获取对应变量的标准方法。

在第二节、继承的成员变量(不重名)中的演示是不标准的。

只是因为没有其他变量了,所以结果一样。

四、继承的成员方法(不重名)

比如说:动物都能移动,兔子也可以移动,并且还能蹦蹦跳跳。

用代码表示就是如下:

也就是说,子类是可以自己调用父类中的方法的。

对象调用方法时,会先在子类中查找有没有对应的方法。若子类中存在就会执行子类中的方法;若子类中不存在就会执行父类中相应的方法。

所以父类方法都是一些通用的功能,子类可以直接使用,不用自己再建立一个方法了,当然子类在父类的基础上也有一定的拓展。

动物会移动,兔子不仅会移动还会跳,跳这个方法就是兔子这个类的拓展

五、继承的成员方法(重名)

再比如说:动物需要吃食物,兔子也需要吃食物,并且它最喜欢吃胡萝卜。

同样是吃这个功能,子类更具体,在父类的基础上增强。

这时就出现了一种情况,方法重写

什么叫方法重写?

就是子类中出现与父类一模一样的方法,将方法逻辑体重写会出现覆盖效果。

前面学习过重载,和这个重写太相近了。那方法重写和方法重载有什么区别呢?

  • 重载是:同名不同参(参数不一样,返回值,方法名一样)
  • 重写是:只是逻辑体不一样,方法名,返回值,参数,其他都一样

总结:

本文分享自微信公众号 - 刘小爱(liuxiaoai946),作者:刘小爱

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2020-04-30

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 【Java】基础50:如何让写的代码像诗一样优雅?

    但是它们是两个完全不一样的概念,Stream流是容器处理的简易API,使用起来特别方便。

    刘小爱
  • 【框架】114:mybatis初体验

    它可以对数据库中的数据进行增删改查,并且比我们之前在用的jdbcTemplate更加。

    刘小爱
  • 【Java】基础05:JDK安装与环境变量的配置

    2.选择开发工具,因为开发工具中以及包含有JRE,所以公关JRE中选择此功能将不可用。同时也可以自定义安装目录,但不要有中文和空格。

    刘小爱
  • Python 继承

    为了保证编写的代码能够同时在 Python 2.x 和 Python 3.x 运行!

    Devops海洋的渔夫
  • 【Java学习笔记之十六】浅谈Java中的继承与多态

    1、  什么是继承,继承的特点? 子类继承父类的特征和行为,使得子类具有父类的各种属性和方法。或子类从父类继承方法,使得子类具有父类相同的行为。 特点:在继承关...

    Angel_Kitty
  • 子类可以继承到父类上的注解吗--有结论了

    -----------------------------------------------------------------

    lyb-geek
  • java基础学习_面向对象(下)01_day08总结

    ============================================================================= ==...

    黑泽君
  • 23.C++- 继承的多种方式、显示调用父类构造函数、父子之间的同名函数、virtual虚函数  上章链接: 22.C++- 继承与组合,protected访问级别

    继承方式 继承方式位于定义子类的”:”后面,比如: class Line : public Object //继承方式是public {...

    张诺谦
  • 关于JAVA你必须知道的那些事(三):继承和访问修饰符

    今天乘着还有一些时间,把上次拖欠的面向对象编程三大特性中遗留的继承和多态给简单说明一下。这一部分还是非常重要的,需要仔细思考。

    编程思录
  • 一篇文章讲清楚Java面向对象三大特性(基础篇)

    面向对象简称 OO(Object Oriented),20 世纪 80 年代以后,有了面向对象分析(OOA)、 面向对象设计(OOD)、面向对象程序设计(OOP...

    Java技术江湖

扫码关注云+社区

领取腾讯云代金券