Java继承_常见问题(七)终篇

来源:互联网 发布:性冲动 知乎 编辑:程序博客网 时间:2024/06/06 17:42

通过上文的描述,我们对java的继承有了基本的了解,下面,我们选几个例子,看看对继承理解的如何。

例1:

package com.ws.basic;class GameObject{int life;}class Creature extends GameObject {String mc="大法师";public void normal_attack() {System.out.println(mc+"在普通攻击!");}}class Hero extends Creature{String mc="圣骑士";}public class testjc {  public static void main(String[] args) {   Hero heroDfs = new Hero(); heroDfs.normal_attack();    }}
结果:大法师在普通攻击!

此例中,Hero继承了Creature, 父类中的mc 变量被隐藏,所以此时如果直接打印:heroDfs的mc,得到的结果会是圣骑士。
但是因为Hero中没有同名的normal_attack方法,所以heroDfs.normal_attack()中调用的normal_attack()是继承自Creature类的,Creature类中的normal_attack()调用的是它本身的mc(Creature.mc),所以输出为:大法师

例2:

package com.ws.basic;class GameObject{int life;}class Creature extends GameObject {String mc="大法师";public void normal_attack() {System.out.println(mc+"在普通攻击!");}}class Hero extends Creature{String mc="圣骑士";public void normal_attack() {System.out.println(mc+"在普通攻击!");}}public class testjc {  public static void main(String[] args) {   Hero heroDfs = new Hero(); heroDfs.normal_attack();    }}
结果:圣骑士在普通攻击!这个上文描述过了,子类存在normal_attack(),父类方法被隐藏,所以返回圣骑士

例3:

package com.ws.basic;class GameObject{int life;}class Creature extends GameObject {String mc="大法师";public void normal_attack() {System.out.println(mc+"在普通攻击!");}public void skill_attack() {System.out.println(mc+"在技能攻击!");}}class Hero extends Creature{String mc="圣骑士";public void normal_attack() {System.out.println(mc+"在普通攻击!");}}public class testjc {  public static void main(String[] args) {   Creature creature = new Hero(); creature.normal_attack(); creature.skill_attack(); System.out.println(creature.mc.toString());    }}
结果:

圣骑士在普通攻击!
大法师在技能攻击!
大法师

根据在Java中,属性绑定到类型,方法绑定到对象。

第一句,和上文一样,子类的对象调用子类的方法,返回圣骑士;

第二句,子类的对象,调父类的方法,返回父类的大法师;

第三句,父类的属性,所以返回父类的大法师。


0 0
原创粉丝点击