方法的重载和重写

本文介绍了Java中的方法重载和方法重写概念。方法重载发生在同一类中,通过参数列表的不同(类型、个数或顺序)实现同名方法的区分。而方法重写则涉及类的继承关系,子类可以重新定义父类中的方法,保持方法名、参数列表和返回类型一致,但实现不同。通过示例代码详细展示了这两个概念的实际运用和调用规则。

方法重载:

方法的重载是指在同一个类中定义多个同名但参数列表(参数类型、参数个数或参数顺序)不同的方法,编译器会根据调用时传递的参数类型、个数和顺序来确定调用哪个方法
使用场景:当某一类方法,用法相似,但又有一些不同时。可以使用同一个方法名,然后根据参数的不同来区分

    public static void main(String[] args) {
        as(10,"结果是:");  //当执行代码是程序会先找到所有名为 as的方法,然后根据参数的类型的 
        个数去比对,两个参数类型分别为 整数和字符串,所以只有方法4符合,所 
        以调用了方法4

        System.out.println(as(10, 32));//同理,两个整数类型 只有方法1符合,方法3为双精度应为 
          10.0 所以调用了1方法

         as(20.500,67.5000);//同理,调用了方法3
        as(12,34,56);//同理,调用了2方法
    }
    public static int as(int a,int b){
        System.out.println("1方法执行了");
        return  a+b;
    }

    public static int as(int a,int b,int c){
        System.out.println("2方法执行了");
        return  a+b+c;
    }
    public static int as(double a,double b){
        System.out.println("3方法执行了");
        return  (int)(a+b);
    }
    public static int as(int a,String b){
        int  product=a*a;
        System.out.println(b+product);
        return product;
    }
 运行结果如下:


方法重载只与下列因素相关
1,参数的个数
2,参数的类型
3.参数类型顺序不同

方法重载与下列因素无关
1,与参数名称无关

2,与方法的返回值无关


方法重写:
    
方法的重写是指子类重新定义父类中已有的方法,方法名、参数列表和返回值类型必须与父类中的方法相同,但方法体可以不同。当子类对象调用重写的方法时,会优先调用子类中的方法,而不是父类中的方法。
使用场景:当使用某个类的方法的部分特性时,可以继承该类,然后对该方法进行一些更改,

例:

public class Animal {
    public void sound() {
        System.out.println("这是一只凶猛的动物");
    }
}

public class Tiger extends Animal {//Tiger类继承了 Animal类 对父类方法惊醒了增强
    @Override
    public void sound() {
        System.out.println("这是一只凶猛的东北虎");
    }
}

方法重写发生的条件:

1, 发生在两个类之间

2,两个类之间有明确的继承关系

3,子类要对父类的方法进行覆盖,覆盖时,不改变方法的名称,参数,和返回类型

<think>首先,用户的问题是:“方法重载重写区别”,这是关于Java编程中方法重载(Overloading)方法重写(Overriding)的区别。 我需要用中文回答问题,因为用户定了“请使用中文回答问题”。 我的回答结构: 1. 解释方法重载(Overloading)。 2. 解释方法重写(Overriding)。 3. 比较两者的区别。 4. 最后,必须根据问题回答提出3-5个相关问题。 5. 相关问题必须以“§§相关问题§§”开头,并且输出在末尾。 6. 不能换行分散,所以相关问题应该在一行内列出,但示例中是数字列表,所以我可以用数字格式如“1. ··· 2. ···”等。 确保回答完整。 关键点: - **方法重载(Overloading)**:在同一个类中,方法相同,但参数列表不同参数类型、个数或顺序不同)。返回类型可以不同,但不能仅靠返回类型区分重载重载发生在编译时。 - **方法重写(Overriding)**:在子类中重新定义父类的方法方法名、参数列表返回类型必须相同重写用于实现多态,发生在运行时。 区别总结: - 作用域:重载在同一个类;重写在子类。 - 参数重载参数不同重写参数相同。 - 返回类型:重载可以不同重写必须相同(或协变返回)。 - 访问修饰符:重载无限制;重写不能更严格(如父类public,子类不能private)。 - 异常:重载无限制;重写不能抛出新的或更广的检查异常。 - 绑定:重载是编译时;重写是运行时。 现在,构建回答: - 先简要介绍两者。 - 然后详细解释区别。 - 最后输出相关问题。 相关问题:基于问题回答,提出3-5个相关问题。例如: 1. 方法重载能改变返回类型吗? 2. 方法重写时访问修饰符有什么限制? 3. 什么是协变返回类型在重写中的应用? 4. 重载重写如何影响多态性? 5.Java中,能重写静态方法吗? 确保相关问题数量在3-5个。 最后,输出格式: - 回答完问题后,直接输出“§§相关问题§§”,然后列出相关问题,用数字点格式。 完整回答结构: 1. 解释重载。 2. 解释重写。 3. 比较区别。 4. §§相关问题§§ 1. ... 2. ... 3. ...</think>在Java编程中,方法重载(Overloading)方法重写(Overriding)是面向对象编程的核心概念,它们都涉及方法的复用,但存在本质区别。以下是详细解释: ### 方法重载(Overloading) - **定义**:在同一个类中,定义多个同名方法,但参数列表不同(例如参数类型、个数或顺序不同)。返回类型可以相同不同,但不能仅靠返回类型区分重载。 - **特点**: - 发生在编译时(静态绑定)。 - 用于提供方法的多版本实现,提高代码可读性。 - 访问修饰符无特殊限制。 - **示例**: ```java class Calculator { int add(int a, int b) { return a + b; } // 重载版本1 double add(double a, double b) { return a + b; } // 重载版本2,参数类型不同 } ``` ### 方法重写(Overriding) - **定义**:在子类中重新定义父类的方法方法名、参数列表返回类型必须相同(或协变返回类型),用于覆盖父类行为。 - **特点**: - 发生在运行时(动态绑定),支持多态。 - 访问修饰符不能比父类更严格(如父类为public,子类不能为private)。 - 不能抛出新的检查异常(checked exception)或更广的异常。 - **示例**: ```java class Animal { void sound() { System.out.println("Animal sound"); } } class Dog extends Animal { @Override void sound() { System.out.println("Bark"); } // 重写父类方法 } ``` ### 主要区别 | 方面 | 方法重载 (Overloading) | 方法重写 (Overriding) | |--------------|------------------------------------------|------------------------------------------| | **作用域** | 同一个类中 | 子类继承父类 | | **参数列表** | 必须不同(类型、个数或顺序) | 必须相同 | | **返回类型** | 可以不同 | 必须相同(或协变返回,如子类返回更具体类型) | | **访问修饰符** | 无限制 | 不能比父类更严格(如不能从public改为private) | | **绑定时间** | 编译时(静态绑定) | 运行时(动态绑定) | | **异常处理** | 无限制 | 不能抛出新的或更广的检查异常 | | **目的** | 提供同名方法不同实现 | 实现多态,覆盖父类行为 |
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值