• Java基础37 方法重写与覆盖




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

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


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

    二、重写(覆盖)的使用

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

    Override01类

    public  class Override01{
    	public static void main(String[] args){
    		 	Dog dog = new Dog();
    	}
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5

    Animal类

    public  class Animal{
    	public void cry(){
    		System.out.println("动物类");
    	}
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5

    Dog类

    public  class Dog extends Animal{
    	public  void cyr(){
    		System.out.println("狗类");
    	}
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5

    因为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();
    	}
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    输出的结果为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())
    
    • 1
    • 2
    • 3

    该处使用的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;
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29

    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;
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30

    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());
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    运行效果

    在这里插入图片描述

  • 相关阅读:
    DNS网络故障排除命令dig&nslookup
    .NET跨平台框架选择之一 - Avalonia UI
    【Python】学生管理系统——详细解释+代码+详细注释(课设必过)
    『C语言』题集 of ⑩
    云原生专题-k8s基础系列-k8s-namespaces详解
    从简历被拒到收割8个大厂offer,我只用了三个月的时间成功逆袭
    基于Java+SpringBoot+Vue前后端分离成绩管理系统设计和实现
    数据库的隔离级别有哪些?
    JMeter接口测试工具基础— 取样器sampler(二)
    MySql的数据存储之B+树(浅谈)
  • 原文地址:https://blog.csdn.net/chenjiap/article/details/127822481