java之重载、重写

重载(Overload):

指一个类中可以定义多个方法名相同,但参数不同的方法。调用时,会根据不同的参数自动匹配对应的方法。

重载的方法,实际是完全不同的方法,只是名称相同而已!

    

构成方法重载的条件:

      1.不同的含义:形参类型、形参个数、形参顺序不同

      2.只有返回值不同不构成方法的重载

             如:int a(String str){}与 void a(String str){} //报错

      3.只有形参的名称不同,不构成方法的重载

            如:int a(String str){}与int a(String s){}


重写(Override):

    

子类通过重写父类的方法,可以用自身的行为替换父类的行为。方法的重写是实现多态的必要条件。

方法的重写需要符合下面的三个要点:

      1.  “==”: 方法名、形参列表相同。

      2.  “≤”:返回值类型和声明异常类型,子类小于等于父类。(范围可以缩小,不能扩大)

      3.  “≥”: 访问权限,子类大于等于父类。(范围可以扩大)

例如:

    父类中:public Person whoIs(){}

    子类中:public Student whoIs(){}   //studnet是person的子类,返回值类型小于父类


面试题:

Overload和Override的区别?Overloaded的方法是否可以改变返回值的类型?

        Overload是重载,Override就是重写。

       重载: 发生在同一个类中,方法名必须相同,参数类型不同、个数不同、顺序不同,方法返回值和访问修饰符可以不同,发生在编译时。

在使用重载要注意以下的几点:

        1、在使用重载时只能通过不同的参数样式。例如,不同的参数类型,不同的参数个数,不同的参数顺序

        2、不能通过访问权限、返回类型、抛出的异常进行重载;

        3、方法的异常类型和数目不会对重载造成影响;

        4、对于继承来说,如果某一方法在父类中是访问权限是priavte,那么就不能在子类对其进行重载,如果定义的话,也只是定义了一个新方法,而不会达到重载的效果。

        重写:表示子类中的方法可以与父类中的某个方法的名称和参数完全相同,通过子类创建的实例对象调用这个方法时,将调用子类中的定义方法,这相当于把父类中定义的那个完全相同的方法给覆盖了,这也是面向对象编程的多态性的一种表现。

        1、覆盖的方法的标志必须要和被覆盖的方法的标志完全匹配,才能达到覆盖的效果;

        2、覆盖的方法的返回值必须和被覆盖的方法的返回一致;

        3、覆盖的方法所抛出的异常必须和被覆盖方法的所抛出的异常一致,或者是其子类;

        4、被覆盖的方法不能为private,否则在其子类中只是新定义了一个方法,并没有对其进行覆盖。

如果父类的方法是private类型,那么,子类则不存在覆盖的限制,相当于子类中增加了一个全新的方法。

public class Test {    private void a(){        System.out.println("a");    }}class test1 extends Test{//报错  父类是private修饰,子类是新方法了,所以不能用重写注解    @Override    public void a() {         System.out.println("q");    }}

至于Overloaded的方法是否可以改变返回值的类型这个问题?

如果几个Overloaded的方法的参数列表不一样,它们的返回者类型当然也可以不一样。如:

private void a(int a){   System.out.println("a");} private int a(double b){   System.out.println("a");   return 1; }

如果两个方法的参数列表完全一样,是否可以让它们的返回值不同来实现重载Overload。这是不行的,要报错。

我们可以用反证法来说明这个问题,因为我们有时候调用一个方法时也可以不定义返回结果变量,即不要关心其返回结果,例如,我们调用map.remove(key)方法时,虽然remove方法有返回值,但是我们通常都不会定义接收返回结果的变量,这时候假设该类中有两个名称和参数列表完全相同的方法,仅仅是返回类型不同,java就无法确定编程者倒底是想调用哪个方法了,因为它无法通过返回结果类型来判断。

 关注公众号,获取免费软件、资料,笔记等。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

心之所向...

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值