Java中方法的重载(overload)与重写/覆写(override)

重载-Overload

函数的方法参数个数或类型不一致,称为方法的重载。
从含义上说,只要求参数的个数或参数的类型不一致就说两个函数是重载函数,而至于返回值是否一样,没关系。同时,重载可以发生在同一个类中也可以发生在继承关系中。
构成方法重载的3个条件:1.参数类型不同;2.参数顺序不同;3.参数个数不同。
方法重载中可以使方法的返回值不同,但返回类型的不同不足以区分两个方法的重载。
举个例子:

class A {
}

class B extends A {
    public void fun(String data1) {
        System.out.println(data1);
    }
    public String fun(String data1, String data2) {
        System.out.println(data1 + "-->" + data2);
        return "";
    }
}

上面的代码说明了在同一个类中的方法重载。此外,如果我们把第一个函数移到A类中,也构成了重载关系。

class A {
    public void fun(String data1) {
        System.out.println(data1);
    }
}

class B extends A {
    public String fun(String data1, String data2) {
        System.out.println(data1 + "-->" + data2);
        return "";
    }
}

重写-Override

重写也被称为覆写。对一个方法的重写必须发生在具有继承关系的两个类中,即子类对父类方法的重写。它要求两个方法的参数个数和类型以及返回值类型都必须一致,这样才称为方法重写。

class A {
    public void fun(String data) {
        System.out.println(data);
    }
}

class B extends A {
    public void fun(String data) {
        System.out.println("XXXX" + data);
    }
}

上面代码演示了子类对父类方法的覆写。可以看到两个函数的参数个数和类型以及返回值都是一致的。

同时子类对父类的方法覆写对权限有要求,子类方法的访问权限必须大于或等于父类方法的访问权限。也就是说如果父类方法的访问权限是default,那么子类必须是default或者public,如果父类方法是public访问权限,那么子类就只能是public访问权限了。然而,实际开发中,绝大多数的方法都是public访问权限,所以覆写方法也是public。

关于访问权限,还有一点需要注意的是,父类方法如果是private,根据JAVA的封装性原则,private是不让其它任何类访问的。那么,此时子类能否对父类的private方法进行覆写呢?

答案是否定的。
举个例子

class A {
    public void test() {
        fun();
    }

    private void fun() {
        System.out.println("父类的private fun()");
    }
}

class B extends A {
    public void fun() {
        System.out.println("子类的public fun()");
    }
}

public class Hello {
    public static void main(String[] args) throws Exception {
        B b = new B();
        b.test();
    }
}

此时运行结果是调用的父类的private fun()方法。

所以,此时对重载和覆写做一个总结:
在这里插入图片描述

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值