方法的重写

在Java中,方法的重写和重载是面向对象编程中常见的概念。方法的重写是指子类重新定义父类中已经存在的方法,而方法的重载是指在同一个类中可以定义多个同名方法,但是它们的参数列表不同。

重写示例:

class Animal {
    public void makeSound() {
        System.out.println("Animal makes a sound");
    }
}

class Dog extends Animal {
    @Override
    public void makeSound() {
        System.out.println("Dog barks");
    }
}

public class Main {
    public static void main(String[] args) {
        Animal animal = new Animal();
        animal.makeSound(); // 输出: Animal makes a sound
        
        Dog dog = new Dog();
        dog.makeSound(); // 输出: Dog barks
    }
}

在上面的例子中,Dog类重写了Animal类中的makeSound方法,当调用dog.makeSound()时会执行Dog类中的方法。

重载示例:

class Calculator {
    public int add(int a, int b) {
        return a + b;
    }
    
    public double add(double a, double b) {
        return a + b;
    }
}

public class Main {
    public static void main(String[] args) {
        Calculator calculator = new Calculator();
        
        int sum1 = calculator.add(5, 3); // 调用第一个add方法
        double sum2 = calculator.add(2.5, 3.5); // 调用第二个add方法
        
        System.out.println("Sum of integers: " + sum1); // 输出: Sum of integers: 8
        System.out.println("Sum of doubles: " + sum2); // 输出: Sum of doubles: 6.0
    }
}

在上面的例子中,Calculator类中有两个同名方法add,分别接受不同类型的参数。当方法被调用时,根据传入参数的类型来确定具体调用哪个版本的方法。

方法的重写
当父类的方法不能满足子类现在的需求时,需要进行方法重写
书写格式
在继承体系中,子类出现了和父类中一模一样的方法声明,我们就称子类这个方法是重写的方法

@Override重写注解
1.@Override是放在重写后的方法上,校验子类重写时语法是否正确。
2.加上注解后如果有红色波浪线,表示语法错误。
3.建议重写方法都加@Override注解,代码安全,优雅!


方法重写注意事项和要求

  1. 重写方法的名称、形参列表必须与父类中的一致。
class Parent {
    public void display(int num) {
        System.out.println("Parent class method");
    }
}

class Child extends Parent {
    // 重写父类方法,方法名称和形参列表必须与父类一致
    public void display(int num) {
        System.out.println("Child class method");
    }
}

     2.子类重写父类方法时,访问权限子类必须大于等于父类(空着不写<protected <public)

class Parent {
    protected void display() {
        System.out.println("Parent class method");
    }
}

class Child extends Parent {
    // 子类重写父类方法时,访问权限必须大于等于父类
    public void display() {
        System.out.println("Child class method");
    }
}

     3.子类重写父类方法时,返回值类型子类必须小于等于父类

class Parent {
    public Number getNumber() {
        return 10;
    }
}

class Child extends Parent {
    // 子类重写父类方法时,返回值类型必须小于等于父类
    public Integer getNumber() {
        return 20;
    }
}

     4.建议:重写的方法尽量和父类保持一致。

class Parent {
    public void display() {
        System.out.println("Parent class method");
    }
}

class Child extends Parent {
    // 建议重写的方法尽量和父类保持一致
    public void display() {
        System.out.println("Child class method");
    }
}

     5.只有被添加到虚方法表中的方法才能被重写

在Java中,除了staticfinal方法,其他方法都可以被重写。虚方法表是用于支持动态绑定的机制,只有动态绑定的方法才能被重写。还有private私有的方法也不能重写哦!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值