scjp考试准备 - 5 - 重载和重写
如下代码,在所指示的位置插入代码能够正常编译:
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:返回值类型的问题,错误的重写;
关于重写和重载我想到个比喻。
把同名方法比作漏斗,作用范围是漏斗注入端的直径,返回值类型是漏斗嘴,形参是漏斗的类型表示漏斗可以用来处理哪些东西。
重写是在一个漏斗上嵌一个漏斗,那么有这样几点要求:两个都是漏斗(同名);两个漏斗必须是同一种类型,不能一个是用来注水的一个用来是注农药的(形参相同);嵌在上方的漏斗(子类方法)直径必须比下方的漏斗(父类方法)大,因为是要用上方的漏斗注入;上方漏斗(子类方法)的漏斗嘴(返回值类型)要比下方的小,不然无法嵌套。
重载限制没那么多了,只要都是漏斗(同名)就行,但是要求漏斗的类型不能相同。
比喻不是很恰当,想想即可。
scjp考试准备 - 5 - 重载和重写的更多相关文章
- java 重载、重写、构造函数详解
方法重写 1.重写只能出现在继承关系之中.当一个类继承它的父类方法时,都有机会重写该父类的方法.一个特例是父类的方法被标识为final.重写的主要优点是能够定义某个子类型特有的行为. class An ...
- C#基础回顾(二)—页面值传递、重载与重写、类与结构体、装箱与拆箱
一.前言 -孤独的路上有梦想作伴,乘风破浪- 二.页面值传递 (1)C#各页面之间可以进行数据的交换和传递,页面之间可根据获取的数据,进行各自的操作(跳转.计算等操作).为了实现多种方式的数据传递,C ...
- java 中继承,组合,重载,重写的实现原理 (转)
我们知道,继承,组合,重载,重写是java语言的面向对象实现的基本特征. 那么在java内部,究竟是如何实现这些面对对象的基本特征的呢? 继承和组合是面向对象中代码复用的主要实现方式,他们可以达到类似 ...
- java基础疑难点总结之成员变量的继承,方法重载与重写的区别,多态与动态绑定
1.成员变量的继承 1.1要点 子类用extends关键字继承父类.子类中可以提供新的方法覆盖父类中的方法.子类中的方法不能直接访问父类中的私有域,子类可以用super关键字调用父类中的方法.在子类中 ...
- [转]Java中继承、多态、重载和重写介绍
什么是多态?它的实现机制是什么呢?重载和重写的区别在那里?这就是这一次我们要回顾的四个十分重要的概念:继承.多态.重载和重写. 继承(inheritance) 简单的说,继承就是在一个现有类型的基础上 ...
- Java中重载和重写的区别
重载 overloading 1) 方法重载是让类以统一的方式处理不同类型数据的一种手段.多个同名函数同时存在,具有不同的参数个数/类型.重载是一个类中多态性的一种表现. 2) Java的方法重载,就 ...
- C#中区别多态、重载、重写的概念和语法结构
C#中区别多态.重载.重写的概念和语法结构 重写是指重写基类的方法,在基类中的方法必须有修饰符virtual,而在子类的方法中必须指明override. 格式: 基类中: public virtual ...
- C++中重载、重写(覆盖)和隐藏的区别实例分析
这篇文章主要介绍了C++中重载.重写(覆盖)和隐藏的区别,是C++面向对象程序设计非常重要的概念,需要的朋友可以参考下 本文实例讲述了C++中重载.重写(覆盖)和隐藏的区别,对于C++面向对象程序设计 ...
- Java基础:多态(重载和重写)
转载请注明出处:jiq•钦's technical Blog (1)域与静态方法 记住"仅仅有普通方法的调用是多态的". 而域和静态方法不是:对于域的訪问.在编译期间就已经进行解析 ...
随机推荐
- 【Spring 2】spring的属性注入形式
一.注入简介 spring是一个java bean的容器,它摒弃了过去通过new关键字调用类再调用类的实例的形式,通过依赖注入维护者一系列的java bean的示例.通过spring所提供的依赖注入 ...
- sphinx 超好资料
http://www.ttlsa.com/?s=sphinx
- Symantec System Recovery
目的:备份系统,备份文件,裸机恢复,异机恢复等 工具:http://bbs.kafan.cn/thread-1800182-1-1.html 下载地址:http://pan.baidu.com/s/1 ...
- Windows 2008修改密码策略方法
Windows Server 2008默认强制要求定期更改密码,这个功能有时实在是让人烦不胜烦,适当情况下可以考虑关闭. 方法如下: 1.按windows键+R(或者点开始---动行)打开运行窗口,输 ...
- 在vs2005中使用SVN进行版本管理
1.软件准备 VisualSVN-Server-2.5.10.msi SVN服务端 WindowsXP-KB942288-v3-x86.exe XP中安装TortoiseSVNSVN1.8必须 Tor ...
- CentOS6.5下安装配置MySQL
CentOS6.5下安装配置MySQL,配置方法如下: 安装mysql数据库:# yum install -y mysql-server mysql mysql-deve 查看mysql-server ...
- CentOS学习笔记—启动、ROOT密码
启动流程一览 简单来说,系统启动的经过可以汇整成底下的流程的: 加载 BIOS 的硬件资讯与进行自我测试,并依据配置取得第一个可启动的装置: 读取并运行第一个启动装置内 MBR 的 boot Load ...
- linux下proc目录详解
proc/pid记录了什么cd /proc/之后,你会发现很多的目录和文件,今天首先来介绍的就是那些以数字命名的目录--它们就是linux中的进程号,每当你创建一个进程时,里面就会动态更新多出一个名称 ...
- Custom PeopleSoft Queries
The following SQL identifies custom queries created in your system from the PSQRYDEFN PeopleTools ...
- Winform菜单之ContextMenuStrip
ContextMenuStrip实际就是上下文菜单,就是右键单击某个窗体或者控件后出来的菜单. 从工具栏里拖一个出来放在窗口上就行 然后进行一系列的设置,设置方法跟前面的MenuStrip基本是一样的 ...