博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
scjp考试准备 - 5 - 重载和重写
阅读量:6308 次
发布时间:2019-06-22

本文共 1344 字,大约阅读时间需要 4 分钟。

如下代码,在所指示的位置插入代码能够正常编译:

class Alpha{     public void bar(int... x){};    public void bar(int x){};} public class Beta extends Alpha{     //insert code here}

有如下选项:

A:  private void bar(int x){} B:  public void bar(int x){} C:  public int bar(String x){
return 1;}D: public Alpha bar(int x){} E: public void bar(int x, int y){} F: public int bar(int x){
return x;}

 

这道题考察的重点在重写,重载是烟幕。

方法重写的特点可以概括为“两同两小一大”。

两同是指:方法名相同,形参列表相同;

两小是指:子类方法的返回值类型要比父类方法的返回值类型更小或相等,子类方法声明抛出的异常类要比父类方法声明抛出的异常类更小或相等;

一大是指:子类方法的访问权限要比父类方法更大或相等(private < default < protected < public)。

此外还有一则限制:重写的方法和父类方法要么都是实例方法,要么都是类方法,不能一个是实例方法一个是类方法,否则会出现编译异常。

 

重载的特点可以概括为“两同一不同”

两同是指:两个方法在同一个类下,方法名相同;

一不同是指:形参不同。

除此之外,方法重载与返回值类型、修饰符等都没有任何关系。

这道题里仅父类涉及了重载。所以在判断时不需考虑重载的问题。

 

判断是否可以正确编译可以基于一个非常简单的原则:当方法被调用时,计算机是否会感到疑惑,即发给计算机的指令是否明确。目前计算机都是记过准确计算来执行用户的指令的。倘若用户的指令不够清晰,计算机就会无法判断,计算机无法判断就会停止执行爆出异常。

 

在上面题目中给出的选项都是方法名相同,只需要判断是否是重写或是新的方法:

A:方法名相同,形参列表相同,像是重写,但是访问权限小于父类方法;

B  : 重写,正确;

C :  方法名相同,但形参不同,是新方法;

D:返回值类型错误,错误的重写;

E:形参不同,是新方法;

F:返回值类型的问题,错误的重写;

 

关于重写和重载我想到个比喻。

把同名方法比作漏斗,作用范围是漏斗注入端的直径,返回值类型是漏斗嘴,形参是漏斗的类型表示漏斗可以用来处理哪些东西。

重写是在一个漏斗上嵌一个漏斗,那么有这样几点要求:两个都是漏斗(同名);两个漏斗必须是同一种类型,不能一个是用来注水的一个用来是注农药的(形参相同);嵌在上方的漏斗(子类方法)直径必须比下方的漏斗(父类方法)大,因为是要用上方的漏斗注入;上方漏斗(子类方法)的漏斗嘴(返回值类型)要比下方的小,不然无法嵌套。

重载限制没那么多了,只要都是漏斗(同名)就行,但是要求漏斗的类型不能相同。

比喻不是很恰当,想想即可。

 

转载于:https://www.cnblogs.com/amunote/p/3809635.html

你可能感兴趣的文章
React Native最佳学习模版- F8 App开源了
查看>>
云服务正在吞噬世界!
查看>>
阅读Android源码的一些姿势
查看>>
Web语义化标准解读
查看>>
一份代码构建移动、桌面、Web全平台应用
查看>>
高性能 Lua 技巧(译)
查看>>
区分指针、变量名、指针所指向的内存
查看>>
异步编程的世界
查看>>
最近话题火爆的四件事你知道不?
查看>>
SpringBoot整合MyBatis
查看>>
云计算产业如何率先推行信用管理?
查看>>
Android 类库书签更新(一)
查看>>
Unity3D Input按键系统
查看>>
简单的一条SQL,不简单的做事思维 NOT IN 、NOT EXISTS、LEFT JOIN用法差别 ...
查看>>
DataWorks:任务未运行自助排查
查看>>
ionic/cordova热部署
查看>>
「镁客早报」特斯拉裁员,马斯克解释没有办法;微软推出Azure DevOps赏金计划...
查看>>
Flink入坑指南第五章 - 语法糖 view
查看>>
centos 7.4 使用 pgxc_ctl 安装与使用
查看>>
Redis 单key值过大 优化方式
查看>>