Java面试基础问题之(七)—— 方法的重载 VS 覆写规则

一. Java方法声明的众多属性

在讨论重载和覆写的区别之前,先补充一下Java方法的背景知识,看下面最为常见的main方法声明,为了完整介绍,自行加了异常的抛出

public static  void  main(String[] args)  throws  Exception {...}

          ①        ②       ③      ④            ⑤                          ⑥            

各属性说明如下:

①:访问权限(修饰符)

②:static/finally

③:返回值

④:方法名

⑤:参数列表

⑥:异常

值得注意的是,在Java语法层面,只有④⑤(⑤包括了形参的个数,类型,顺序)构成方法签名即方法唯一性标识,换言之,如果一个类中两个方法的方法签名一摸一样,则即使①②③⑥不同(特别是返回值)编译器仍然会认为这两个方法重复了,从而报错。

引申来说,其实在Java字节码层面是支持返回值可以作为方法签名的一部分,这是为了支持其他语言编译成class文件,Java语法层面并不支持。

 


二. 重载(OverLoad)

再看方法:

public static  void  main(String[] args)  throws  Exception {...}

       ①        ②       ③      ④            ⑤                          ⑥            

先对方法重载有个认识,overload其实就是在一个类中写一个名字同已经存在的方法名一样的方法,但又要保证使用不同方式调用方法时JVM能识别出这是两个不同的方法,e.g.

new Student("Tom") VS new Student("Tom", 14)

所以,问题变成:在方法名④相同的前提下,①②③⑤⑥哪些变化能保证JVM能识别出这是不同的方法,哪些又是“无关紧要”——对是否重载没有影响呢?

这就引出了方法重载的充要条件:

方法名④要一样,参数列表⑤的个数,类型和顺序</

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值