方法覆盖(重写)

举报
荞慧子 发表于 2022/12/31 23:44:10 2022/12/31
【摘要】 介绍        方法覆盖(重写)就是子类有一个方法,和父类的某个方法的名称、返回类型、参数一样,那么我们就说子类的这个方法覆盖了父类的方法。细节(1)子类的方法的参数,方法名称,要和父类方法的参数,方法名称完全一致。(2)子类方法的返回类型和父类方法的返回类型一样,或者是父类返回类型的子类。比如:父类方法的返回类型是Object,子类方法的返回类型是String。但如果父类方法的返回类型...

介绍

        方法覆盖(重写)就是子类有一个方法,和父类的某个方法的名称、返回类型、参数一样,那么我们就说子类的这个方法覆盖了父类的方法。

细节

(1)子类的方法的参数,方法名称,要和父类方法的参数,方法名称完全一致。

(2)子类方法的返回类型和父类方法的返回类型一样,或者是父类返回类型的子类。

比如:父类方法的返回类型是Object,子类方法的返回类型是String。但如果父类方法的返回类型

是String,子类方法的返回类型是Object就会报错,因为Object不是String的子类。

(3)子类方法不能缩小父类方法的访问权限。

即:public -> protected -> 默认 -> private

案例演示

 编写父类Animal,并编写一个子类Dog来继承Animal

public class Override01 {
    public static void main(String[] args) {
        Dog dog = new Dog();
        dog.cry();
    }
}

public class Animal {
    public void cry() {
        System.out.println("哈士奇。。。");
    }
}

public class Dog extends Animal{

    //因为Dog是Animal类的子类
    //Dog的cry方法和Animal的cry定义形式一样(名称、返回类型、参数)
    //这时我们就说Dog的cry方法重写了Animal的cry方法
    public void cry() {
        super.cry();
        System.out.println("吃骨头。。。");
    }
}

查看输出结果:

重载和重写的比较

名称 发生范围 方法名 形参列表 返回类型 修饰符
重载(overload) 本类 必须一样 类型、个数或者顺序至少有一个不同 无要求 无要求
重写(override) 父子类 必须一样 相同 子类重写的方法,返回的类型和父类方法返回的类型一致,或者是其子类 子类方法不能缩小父类方法的访问范围

练习

1.编写一个Person类,包括属性/private(name、age),构造器,方法say(返回自我介绍的字符串)

2.编写一个Student类,继承Person类,增加id、score属性/private,以及构造器,定义say方法(返回自我介绍的信息)

3.在main中,分别创建Person和Student对象,调用say方法输出自我介绍

编写一个Person类,包括属性/private(name、age),构造器,方法say(返回自我介绍的字符串)

public class Person {

    private String name;
    private int age;

    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public String say() {
        return "name=" + name + " age=" + age;
    }
}

编写一个Student类,继承Person类,增加id、score属性/private,以及构造器,定义say方法(返回自我介绍的信息)

public class Student extends Person{

    private String id;
    private double score;

    public Student(String name, int age, String id, int score) {
        super(name, age);
        this.id = id;
        this.score = score;
    }

    public String say() {
        return super.say() + " id=" + id + " score=" + score;
    }
}

在main中,分别创建Person和Student对象,调用say方法输出自我介绍

public class OverrideExercise {
    public static void main(String[] args) {
        Person person = new Person("周小末",18);
        System.out.println(person.say());
        Student student = new Student("周小末",18,"小末",100);
        System.out.println(student.say());

    }
}
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。