宁武皇仁光九年锦文轩刻本《异闻录》载: 扶桑画师浅溪,居泰安,喜绘鲤。院前一方荷塘,锦鲤游曳,溪常与嬉戏。 其时正武德之乱,潘镇割据,战事频仍,魑魅魍魉,肆逆于道。兵戈逼泰安,街邻皆逃亡,独溪不舍锦鲤,未去。 是夜,院室倏火。有人入火护溪,言其本鲤中妖,欲取溪命,却生情愫,遂不忍为之。翌日天明,火势渐歇,人已不见。 溪始觉如梦,奔塘边,但见池水干涸,莲叶皆枯,塘中鲤亦不知所踪。 自始至终,未辨眉目,只记襟上层迭莲华,其色魅惑,似血着泪。 后有青岩居士闻之,叹曰:魑祟动情,必作灰飞。犹蛾之投火耳,非愚,乃命数也。 ————《锦鲤抄》

【重载与重写】

重载:同一个类中有一些方法,其方法名相同,但是参数个数,参数类型不同

重载规则:

  • 被重载的方法必须改变参数列表(参数个数或类型不一样);
  • 被重载的方法可以改变返回类型;
  • 被重载的方法可以改变访问修饰符;
  • 被重载的方法可以声明新的或更广的检查异常;
  • 方法能够在同一个类中或者在一个子类中被重载。
  • 无法以返回值类型作为重载函数的区分标准。

和重写的主要区别:重载范围是一个类内,重写存在于是父子类关系之中

 

重写(override):重写需要类与类有继承关系,比如A extends B,而且是针对非静态的方法

我们都知道,子类可以继承父类的属性,方法(注意私有类型除外),倘若我们想在父类方法基础上做一些修改,添加,那就叫重写,字面意思,子类可以对父类的方法进行修改(重写后如果还想用父类的原方法就需要super关键字,

举例:(注意都在一个包下)

父类Animal

public class Animal {


    public void run(){
        System.out.println("动物都会跑");
    }


}

子类Cat

public class Cat extends Animal {

    public void run(){
        super.run();//自己重写父类方法后还想再调用父类的那个方法就用super关键字
        System.out.println("猫会跑");
        System.out.println("猫跑起来静悄悄");
    }

}

测试类

public class demo4 {
    public static void main(String[] args) {
//重写后都是输出子类方法
        Cat cat = new Cat();

        Animal animal = new Cat();//向上转型

        animal.run();


    }
}

输出结果:

动物都会跑
猫会跑
猫跑起来静悄悄

 

如果不用super调用 ,那就只会输出后两句:

猫会跑
猫跑起来静悄悄

 

总结:方法的重写(Overriding)和重载(Overloading)是java多态性的不同表现,重写是父类与子类之间多态性的一种表现,重载可以理解成多态的具体表现形式。

 

posted @ 2021-02-23 16:26  哒布溜  阅读(75)  评论(0编辑  收藏  举报