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)域与静态方法 记住"仅仅有普通方法的调用是多态的". 而域和静态方法不是:对于域的訪问.在编译期间就已经进行解析 ...
随机推荐
- VBS创建数据表
'创建数据表'参数:strDBPath 字符串型 数据库路径'参数:strTableName 字符串型 需要创建的数据表的名称'参数:strColumnName 字符串型 初始化的字段名称,其实可以算 ...
- hbase blocksize设置,与hdfs关系
关于如何设定数据块的大小,我们应用一段HFile源码中的注释: 我们推荐将数据块的大小设置为8KB至1MB.大的数据块比较适合顺序的查询(比如Scan),但不适合随机查询,想想看,每一次随机查询可能都 ...
- C++ 必知必会: 条款1: 数据抽象
数据抽象, 具有C语言经理的我, 原先是将其看做是一个数据的集合, 把自己常用的数据通过某种方式总结,集合起来, 使用的时候能够更加方便------其实这个还是结构体思想的延续,结构体内部包含了若干的 ...
- DirectDraw打造极速图形引擎(Alpha混合)
显然DirectDraw是Windows下写2D图形程序的最好选择,虽然Direct3D也可以写,但是没DirectDraw简单方便,特别对于初学者,一来就接触那么多函数和参数总不是件愉快的事,所以我 ...
- ASP.NET验证控件二
RequiredFieldValidator 验证控件 页面布局: <div> <h1>RequiredFieldValidator 验证控件</h1> 用户名 ...
- Linux下Mysql主从复制(Master-Slave)与读写分离(Amoeba)实践
一.为什么要做Mysql的主从复制(读写分离)?通俗来讲,如果对数据库的读和写都在同一个数据库服务器中操作,业务系统性能会降低.为了提升业务系统性能,优化用户体验,可以通过做主从复制(读写分离)来减轻 ...
- 第一部分 CLR基础:第1章 CLR的执行模型
1.1将源代码编译成托管模块
- 如何消除选定TextBox后的光标但又不失去焦点。
情景描述: 选择TextBox里的内容 Name:textTile 但是没有光标. 相关实现代码: [DllImport("user32", EntryPoint = " ...
- Vue.js学习 Item11 – 组件与组件间的通信
什么是组件? 组件(Component)是 Vue.js 最强大的功能之一.组件可以扩展 HTML 元素,封装可重用的代码.在较高层面上,组件是自定义元素,Vue.js 的编译器为它添加特殊功能.在有 ...
- object在ie8与ie9中与下文多出几像素问题
今天发现一个很古怪的问题,object与下面文字部分的间隔超过了30个像素,关系是不管用padding还是margin都是一样的效果: 给其设置overflow:hidden属性依然没有任何效果,再设 ...