Java基础37 方法重写与覆盖

本文详细介绍了Java中的方法重写(覆盖)概念,通过示例展示了如何在子类中重写父类的方法,并强调了重写时需遵循的条件。此外,还探讨了重写与重载的区别。在提供的代码示例中,创建了Person和Student类,展示如何在子类Student中重写父类Person的say方法,输出不同的自我介绍信息。
摘要由CSDN通过智能技术生成


一、 什么是重写(覆盖)?

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


提示:以下是本篇文章正文内容,下面案例可供参考

二、重写(覆盖)的使用

现在创建三个类来演示方法重写的情况:Override01、Animal、Dog,其中Dog类继承Animal类。

Override01类

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

Animal类

public  class Animal{
	public void cry(){
		System.out.println("动物类");
	}
}

Dog类

public  class Dog extends Animal{
	public  void cyr(){
		System.out.println("狗类");
	}
}

因为Dog是Animal子类,所以Dog的cry方法和Animal的cry定义形式一样(名称、返回类型、参数),这时我们就说Dog的cry方法是重写了Animal的cry方法。

现在在Override01类中调用Dog类:

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

输出的结果为Dog类中的信息:“狗类”

如果把Dog类中的cry注释掉,那么通过Override01类原封不动的输出,得到的结果变成了Animal中的信息:“动物类”


三、Override的注意事项

● 注意事项与使用细节

方法重写也叫方法覆盖,需要满足下面的条件:

  1. 子类的方法的形参列表方法名称,要和父类的方法的形参列表方法名称完全一致
  2. 子类方法的返回类型和父类方法返回类型一样,或者是父类返回类型的子类。
    【比如 : 父类 返回类型是 Object,子类方法返回类型是String】
  3. 子类方法不能缩小父类方法的访问权限,必须大于或等于父类的访问权限级别。
  4. 访问权限级别:public > protected > 默认 > prvate

四、overload与override的区别

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

代码如下(示例):

data = pd.read_csv(
    'https://labfile.oss.aliyuncs.com/courses/1283/adult.data.csv')
print(data.head())

该处使用的url网络请求的数据。


练习

  1. 编写一个Person类,包括属性 / private(name、age),构造器、方法say(返回自我介绍的字符串)。
  2. 编写一个Student类,继承Person类,增加id、score属性 / private,以及构造器,定义say方法(返回自我介绍的信息)
  3. 在mian中,分别创建Person和Student对象,调用say方法输出自我介绍

代码实现

Person类

public class Person {
    private String name;
    private int age;

    public String say(){
        return name + "今年"+age+"岁";
    }

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

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }
}

Student类

public class Student extends Person{
    private int id;
    private int score;

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

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

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public int getScore() {
        return score;
    }

    public void setScore(int score) {
        this.score = score;
    }
}

Test类

public class test {
    public static void main(String[] args) {
        Person ps = new Person("张三",18);
        System.out.println(ps.say());

        Student st = new Student("李四",18,1,100);
        System.out.println(st.say());
    }
}

运行效果

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值