Java中的方法重载与重写

来源:互联网 发布:做吉他谱的软件 编辑:程序博客网 时间:2024/06/05 00:13

1.简述

  • 重载就是一个类可以有多个同名方法。
  • 重写是指在子类继承父类的时候,可以改写父类方法的实现。

2.说明

  首先定义一个Monster类。

class Monster {    private String nickname;    private String territory;    public Monster() {}    public Monster(String nickname) {        this.nickname = nickname;    }    public void earn(String slogan) {        System.out.println(slogan);    }    public String getName() {        return nickname;    }    public String getTerritory() {        return territory;    }    public void setTerritory(String territory) {        this.territory = territory;    }    public String toString() {        return "我是" + nickname;    }}

  接着再定义一个Goblin继承Monster。

class Goblin extends Monster {    public Goblin(String nickname) {        super(nickname);    }}

  到目前为止,上面的例子还只是一个很普通的继承关系,还没有出现重载与重写。接下来,在Goblin中定义两个方法。

class Goblin extends Monster {    public Goblin(String nickname) {        super(nickname);    }    public void earn(String slogan) {        System.out.print("我是" + this.getName() + "。");        super.earn(slogan);    }    public void earn(String role, String story) {        System.out.println(role + ": " + story);    }}

  然后,写个例子。

public class Story {    public static void main(String[] args) {        // TODO Auto-generated method stub        String slogan = "此山是我开,此树是我栽,要想从此过,留下买路财.";        Monster bullDemonKing = new Monster("平天大圣");        bullDemonKing.earn(slogan);        Goblin redBoy = new Goblin("圣婴大王");        redBoy.earn(slogan);        String role = "落难儿童";        StringBuilder story = new StringBuilder()          .append("师父呀,山西去有一条枯松涧,涧那边有一庄村,我是那里人家。")          .append("我祖公公姓红,只因广积金银,家私巨万,混名唤做红百万。")          .append("年老归世已久,家产遗与我父。")          .append("近来人事奢侈,家私渐废,改名唤做红十万,专一结交四路豪杰,将金银借放,希图利息。")          .append("怎知那无籍之人,设骗了去啊,本利无归。")          .append("我父发了洪誓,分文不借。")          .append("那借金银人,身贫无计,结成凶党,明火执杖,白日杀上我门,将我财帛尽情劫掳,把我父亲杀了,见我母亲有些颜色,拐将去做什么压寨夫人。")          .append("那时节,我母亲舍不得我,把我抱在怀里,哭哀哀,战兢兢,跟随贼寇,不期到此山中,又要杀我,多亏我母亲哀告,免教我刀下身亡,却将绳子吊我在树上,只教冻饿而死,那些贼将我母亲不知掠往那里去了。")          .append("我在此已吊三日三夜,更没一个人来行走。")          .append("不知那世里修积,今生得遇老师父,若肯舍大慈悲,救我一命回家,就典身卖命,也酬谢师恩,致使黄沙盖面,更不敢忘也。");        redBoy.earn(role, story.toString());    }}

  然后看一下运行结果。
 这里写图片描述

  解释一下上面的情况,上面在Monster中定义了一个earn方法,然后在Goblin中第把它给重写了,接着Goblin中又定义了一个新的earn方法,相当于又把自己的earn方法给重载了。翻译成故事就是,牛魔王每次去打劫(或者谋生?)的时候都把口号喊出来(通过earn方法),它的儿子红孩儿想在喊口号的时候把自己的外号也叫出来,于是就重写了老牛的earn方法。后来碰上了狠角色,觉得只是喊口号不太可行,于是就通过重载earn方法角色扮演了一把,装了一个可怜的角色,通过一个悲惨的故事骗取别人同情心然后作案。然后,结果就是师父又被妖怪抓走了。
  所以,重载就是同一类多个同名的不同方法(比如,红孩儿遇弱则一声吼,遇强一部剧,都叫earn方法)。而重写就是改写一下父类的方法实现(就像红孩儿不仅要喊口号,还要喊外号一样)。

3.总结

  在Java中的方法重载是通过同一个方法名而参数不同实现的。这里的参数不同包括参数类型和参数个数。
  在Java中的方法重写是通过继承父类方法,并改写其方法体实现的。

0 0
原创粉丝点击