Java方法的重载与重写

方法重载

在Java中,同一个类中的多个方法可以有相同的方法名称,但是有不同的参数列表,这就称为方法重载(method overloading)。

参数列表又叫参数签名,包括参数的类型、参数的个数、参数的顺序,只要有一个不同就叫做参数列表不同。

1. 方法重载的规则

  • 方法名称必须相同。
  • 参数列表必须不同。
  • 方法的返回类型可以相同也可以不相同。
  • 仅仅返回类型不同不足以称为方法的重载。

2. 方法重载的注意事项

  • 参数类型的自动转换。即当参数个数与顺序相同,方法执行时无法找到与传递参数完全相同的类型时,可按照自动隐式转换规则匹配相应的方法。
    在这里插入图片描述
package com.wang.Method;

public class Method_Overload {
    public static void main(String[] args) {
        byte b=10;
        test(b);
    }

    public static void test(short s){
        System.out.println("sssss");
    }
    public static void test(char c){
        System.out.println("ccccc");
    }
    public static void test(int i){
        System.out.println("iiiiii");
    }
}

在这里插入图片描述

  • 当参数个数与顺序相同,方法执行时无法找到与传递参数完全相同的类型时,若父类型对应的方法存在,则可执行此方法

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

        User1 user = new User1();
        test(user);

    }
    public static void test(Person person) {
        System.out.println("person...");
    }
//    public static void test(User1 user1) {
//        System.out.println("user1...");
//    }

}
class Person {

}
class User1 extends Person {

}

执行结果
在这里插入图片描述

  • 不能通过访问权限、返回类型、抛出的异常进行重载。
  • 跟成员方法一样,构造方法也可以重载。

方法重写

子类中出现和父类中一模一样的方法(方法名,参数列表)

1. 方法重写的规则

  1. 方法签名-----子类中的重写方法的方法签名与父类被重写的方法方法签名完全相同
  2. 返回值类型------基本数据类型完全相同 引用数据类型 : 子类 <= 父类
  3. 权限修饰符 ------子类的权限修饰符>=父类

权限修饰符 : private < 默认(什么都不写) < protected < public

2. 注意事项

  • private修饰的方法不能被重写
  • final修饰的方法不能被重写
  • static修饰的方法不能被重写
  • 动态绑定。
public class Method_override {
    public static void main(String[] args) {

        Person2 user = new User2(); // 多态
        System.out.println(user.sum());
    }

}
class Person2 {

    public int i = 10; // 父类的i
    public int sum() {
        return getI() + 10;
        //return i + 10;
    }
    public int getI() {
        return i;
    }

}
class User2 extends Person2 {
    public int i = 20;//当前类的i
    @Override
    public int getI() {
        return i;
    }
}

如上程序,执行sum方法时,会调用getI方法,由于动态绑定,执行的getI方法时User2提供的,因此结果应该为30

在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值