Java的三个大招之二:继承

继承,从世俗的角度来解释便是子女得到父辈的财产或物品。程序中,继承是指两个类的从属关系,它可以使多种事物之间形成一种关系体系。例如贵宾和泰迪都是属于宠物犬,程序中便可以描述为贵宾和泰迪继承自动物。这篇要文章主要理清三个问题:

  1. 继承的概念是什么?
  2. 继承中如何重写父类的方法?
  3. 关键字super如何使用?

先看第一个问题,在Java中类的继承是指在一个现有类的基础上去构建一个新的类,构建出来的类被称作子类,现有的类被称作父类,子类会自动拥有父类所有课继承的属性和方法。同时,程序中通常用extends关键字来声明一个继承另一个类,下面就通过一个案例来演示:

继承的基本使用.JPG

上面代码的运行结果是“动物的叫声”和“我的名字叫贵宾”。其中Dog类通过extends继承了Animal类,这样Dog类便是Animal类的子类。从运行结果可以看出,子类虽然没有定义name属性和shout方法,但是却能访问这两个成员,这也就说明了子类在继承父类的时候,会自动拥有父类的所有成员。但也有一些问题需要注意下:

  1. Java中,类只支持单继承不允许多重继承,也就是说一个类只能有一个父类。
  2. 多个类可以继承同一个父类。
  3. 可以多层继承,即一个类的父类可以去继承另外的父类。
  4. Java中的子列和父类只是一种相对概念。

接下来看第二个问题,继承中重写父类方法是怎么回事。
我们知道继承关系中,子类会自动继承父类中定义的方法,但有时在子类需要对继承的方法进行修改,即重写父类方法。好比父亲的理想,如果儿子不喜欢,可以去追求自己的梦想。
上面代码中,Dog类继承了Animal类中的shout方法,调用时会打印“动物的叫声”,这明显不是描述一种具体动物的叫声,Dog发出的叫声应该是“汪汪汪。。。”为了解决这个问题,可以在Dog类中重写父类Animal的shout()方法,具体代码如下:

继承中重写父类方法.JPG

运行结果是“汪汪汪。。。”。从运行结果可以看到,在调用Dog类对象的shout方法是,只会调用子类重写后的方法。

最后来看第三个问题,如何正确使用super关键字?
从上一个代码中可以看到,当子类重写父类的方法后,子类对象将无法访问父类被重写的方法,为了解决这个问题,Java中专门提供一个super关键字用于访问父类的成员。super的作用主要体现在两个方面:

  1. 使用super关键字调用父类的成员变量和方法,格式如下
    super.成员变量;
    super.成员方法({参数1,参数2...});
  2. 使用super关键字调用父类构造方法,格式如下
    super.({参数1,参数2...});
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 158,560评论 4 361
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,104评论 1 291
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,297评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,869评论 0 204
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,275评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,563评论 1 216
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,833评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,543评论 0 197
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,245评论 1 241
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,512评论 2 244
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,011评论 1 258
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,359评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,006评论 3 235
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,062评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,825评论 0 194
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,590评论 2 273
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,501评论 2 268

推荐阅读更多精彩内容

  • 一.成员变量与局部变量的区别 成员变量:在类中定义,用来描述对象将要有什么(属性)。可被本类方法和其他跟当前类有关...
    jeffierw阅读 519评论 0 0
  • 1 面向对象No6 面向对象 OO Object Oriented 编程时以对象为单元,封装数据和逻辑,以此提...
    征程_Journey阅读 1,055评论 0 2
  • 1.面向对象三大特性 -封装性 -继承性 -多态性 2.什么是封装 封装性就是隐藏实现细节,仅对外公开接口。 3....
    梦夜繁星阅读 1,050评论 0 6
  • 王孝祥看了顾妍一眼,带着一点点不解,没想到自己做做样子的拳头,顾妍竟会主动请求被捶。 顾妍看出了王孝祥的疑惑,但没...
    果二阅读 253评论 0 1
  • 定义和用法 DATE_FORMAT() 函数用于以不同的格式显示日期/时间数据。 语法 DATE_FORMAT(d...
    凯哥学堂阅读 524评论 0 0