常见java面试题–第三部分:重载与重写-java开发java经验技巧

常见java面试题–第三部分:重载与重写-java开发java经验技巧

ID:30815987

大小:51.00 KB

页数:4页

时间:2019-01-03

常见java面试题–第三部分:重载与重写-java开发java经验技巧_第1页
常见java面试题–第三部分:重载与重写-java开发java经验技巧_第2页
常见java面试题–第三部分:重载与重写-java开发java经验技巧_第3页
常见java面试题–第三部分:重载与重写-java开发java经验技巧_第4页
资源描述:

《常见java面试题–第三部分:重载与重写-java开发java经验技巧》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、常见JavaIfll试题—第三部分:重载与重写-Java开发Java经验技巧常见Java面试题-第三部分:重载(overloading)与重写(overriding)本文作者:ImportNcw-郑雯未经许可,禁止转载!ImportNew注:本文是ImportNew编译整理的Java而试题系列文章之一。你可以从这里查看全部的Java面试系列。这篇文章介绍的曲见面试题是关于重载(overloading)方法和重^(overriding)方法的。Q・下面代码片段的输出结杲是什么?publicclassMethodOverrideVsOverload{publicbooleanequals(Met

2、hodOverrideVsOverloadother){System,out.printin(z,MethodOverrideVsOverloadequalsmethodreached,/);returntrue;}publicstaticvoidmain(String[]args){Objectol=newMethodOverrideVsOverload();Objecto2=newMethodOverrideVsOverload();MethodOverrideVsOverloado3二newMethodOverrideVsOverload();MethodOverrideVsOver1

3、oado4二newMethodOverrideVsOver1oad();if(ol.equals(o2)){System,out・println("objectsolando2areequal");}if(o3.equals(o4)){System.out.println(〃objectso3ando4areequal");}}}A・输出结果是:MethodOverrideVsOverloadequalsmethodreachedobjectso3ando4areequal这个问题考察了哪些概念呢?•Java语言屮,一个类只能从一个类屮继承出来(也就是,单继承结构),如果没有显式的标明所继承

4、白的类,那么自动继承£1Object对象。•大多数的非final对彖类方法都会被子类重q(overridden):publicboolcanequals(Objcctobj);//makenoteofthismethodpublicinthashCode();publicStringtoString();•重载方法在编译时起作用(例如,静态绑定),重写方法在运行时起作用(例如,动态绑定)。静态绑定意味着JVM在编译吋决定调用的类或方法。而动态绑定时,JVM是在运行时决定调用的类或方法。动态绑定设计是多态的:基础。更多了解编译时和运行时.•子类中重写父类的对应方法必须遵循下血的规则:不可变(译

5、者注:包扭参数类型和个数)。返回类型不可变,除了协变返回类型或其子类型(covariant(subtype)returns)o异常子类中可以抛出更少的异常,但绝对不能抛出父类中没冇定义的已检查异常。访问权限比父类中对应方法更宽松。调用运行时(也就是动态绑定),根据对象类型來决定调用的具体方法。现在,再回头看上面的代码,MethodOverrideVsOverload?类中的”equals(MethodOverrideVsOverloadother)"方法并没冇重写Object类中的”publicbooleanequals(Objcctobj)”方法。这是因为其违背了参数规则,其屮一个是Met

6、hodOverrideVsOverload类型,而另一个是Object类型。因此,这两个方法是重载关系(发生在编译时),而不是重写关系。因此,当调用o1.equals(o2)时,实际上调用了object类中的publicbooleanequals(Objectobj)方法。这是因为在编译时,ol和o2都是Object类型,而Object类的equals(…)方法是比较内存地址(例如,0bject@235f56和0bject@653af32)的,因此会返回false。当调用o3・equals(o4)时,实际上调用(MethodOveTrideVsOveTload类中的equals(Method

7、OverrideVsOverloadother丿方法。这是因为在编译时,o3和o4都是MethodOverrideVsOverload类型的,因此得到上述结果。接下来还可以怎么提问呢?Q.那怎么解决上而的那个问题呢?A.在Java5屮,新增了注解,其屮包括很好用的编译时注解(compiletimeannotations)^override,来保证方法正确的重写了父类方法。如果在上面的代码屮添加了注解,那么JV

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。