Java 中的重写与重载

目录

重写

重写的条件

重写的示例

重载(Overload)

重载的条件

重载的示例

区别总结


Java 作为一门面向对象的编程语言,提供了丰富的多态性支持,其中重写(Override)和重载(Overload)是实现多态性的两种基本方式。这两种技术虽然名字相似,但在功能和用途上有着根本的区别。本文将详细介绍重写和重载的定义、规则以及它们在实际开发中的应用。

重写

重写是子类对父类方法的重新实现。当子类继承父类后,如果父类的某个方法不能满足子类的需求,子类可以定义一个与父类相同名称和参数的方法来覆盖父类的方法。

重写的条件

  1. 方法名和参数列表必须完全相同
  2. 返回类型可以是被重写方法的返回类型的子类型(Java 5及以上版本)。
  3. 访问权限不能比父类中被重写的方法更严格
  4. 重写方法可以抛出任何非强制性异常,但不能抛出新的或更广泛的强制性异常
  5. 被标记为 final 的方法不能被重写

重写的示例

class Animal {
    public void move() {
        System.out.println("动物可以移动");
    }
}

class Dog extends Animal {
    @Override
    public void move() {
        System.out.println("狗可以跑和走");
    }
}

public class TestDog {
    public static void main(String[] args) {
        Animal a = new Animal();
        Animal b = new Dog();
        
        a.move();
        b.move();
    }
}

在这个例子中,Dog 类重写了 Animal 类的 move 方法。尽管变量 b 被声明为 Animal 类型,但它实际引用的是 Dog 对象,所以调用的是 Dog 类的 move 方法。

重载(Overload)

重载发生在同一个类中,当两个或多个方法具有相同的名称但参数列表不同时,这些方法就被视为重载。重载使得程序可以定义多个同名的方法,通过输入参数的不同来执行不同的功能。

重载的条件

  1. 参数列表必须不同(参数数量或类型不同)。
  2. 被重载的方法可以改变返回类型
  3. 被重载的方法可以改变访问权限
  4. 被重载的方法可以声明新的或更广泛的检查异常

重载的示例
 

public class Overloading {
    public int test() {
        System.out.println("test1");
        return 1;
    }

    public void test(int a) {
        System.out.println("test2");
    }

    public String test(int a, String s) {
        System.out.println("test3");
        return "returntest3";
    }

    public String test(String s, int a) {
        System.out.println("test4");
        return "returntest4";
    }
    
    public static void main(String[] args) {
        Overloading o = new Overloading();
        System.out.println(o.test());
        o.test(1);
        System.out.println(o.test(1, "test3"));
        System.out.println(o.test("test4", 1));
    }
}

区别总结

  • 参数列表:重载方法必须修改参数列表;重写方法一定不能修改。
  • 返回类型:重载方法可以修改返回类型;重写方法返回类型一定不能修改,除非是子类型。
  • 异常:重载方法可以修改异常;重写方法可以减少或删除异常,不能抛出新的或更广泛的异常。
  • 访问权限:重载方法可以修改访问权限;重写方法不能实施更严格的访问限制。

通过理解和应用重写与重载,Java开发者可以有效地使用多态性,提高程序的灵活性和可维护性。

  • 14
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 10
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值