java方法重写/覆盖(override)

一、基本介绍

方法覆盖即子类有一个方法,与父类(或更上一级的父类)的某个方法的名称、参数、返回类型一样,那么我们就说子类的整个方法覆盖了父类的方法(有继承关系是重写的前提

二、快速入门案例

//父类
public class Animal {
        public void cry(){
            System.out.println("动物cry");
        }
}
//子类
public class Dog extends Animal{
    //因为Dog是Animal的子类,
    //且Dog的cry方法与Animal的cry方法名称、返回类型、参数一样
    //因此构成了方法重写
    public void cry(){
        System.out.println("狗叫");
    }
}

//main
public class Override01 {
    public static void main(String[] args) {
        //演示方法重写的情况
        Dog dog = new Dog();
        //调用的是Dog类的cry方法
        dog.cry();
    }
}

三、使用细节

1、子类方法的形参列表、方法名称必须和父类方法形参列表、方法名称完全一致

2、子类方法的返回类型和父类方法的返回类型一样、或者是父类返回类型的子类

     比如、父类返回类型是 Object,子类返回类型是String,(String是Object的子类)

3、子类方法不能缩小父类方法的访问权限

     比如,父类方法是默认修饰符,子类是public,这样是对的,但是反过来就会缩小父类的访问         权限

四、方法重写(override)和方法重载(overload)的区别

五、练习

//super.say() 调用父类方法
package com.lmdedu.override;

public class OverrideExercise {
    public static void main(String[] args) {

        Person person = new Person("Jack",10);
        System.out.println(person.say());

        student jack = new student("jack",10,"6666",3.25);
        System.out.println(jack.say());
    }
}

class Person{
    private String name;
    private int age;

    public Person() {
    }

    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;
    }

    public String say(){
        return "我是" + name + "\t" + "年龄" + age;
    }
}


class student extends Person{
    private String id;
    private double score;

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

    public String getId() {
        return id;
    }

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

    public double getScore() {
        return score;
    }

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

    public String say(){//super.say() 调用父类方法
        return super.say() + "id为" + id + "\t" + "成绩为" + score;
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值