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)域与静态方法 记住"仅仅有普通方法的调用是多态的". 而域和静态方法不是:对于域的訪问.在编译期间就已经进行解析 ...
随机推荐
- Centos linux php扩展安装步骤
使用phpinfo()函数输出PHP信息,然后找到Configuration File (php.ini) apachectl 其设计意图是帮助管理员控制Apache httpd后台守护进程的功能. ...
- java基础回顾(七)——ThreadPoolExecutor
先来看一下构造函数 public ThreadPoolExecutor(int corePoolSize, int maximumPoolSize, long keepAliveTime, TimeU ...
- 【Hibernate 7】浅谈Hibernate的缓存机制
一.Hibernate缓存机制简介 对于Hibernate本身来说,它的缓存主要包括三部分:session缓存(一级缓存).二级缓存.查询缓存. 1.1,session缓存 随着session的关闭而 ...
- My Sql 1067错误兼编码问题解决
My Sql 大部分都是用绿色版(解压版) 然后注册服务 简单方便. 但是.配置文件头痛的一逼. 首先配置mysql的环境变量. mySQL 环境变量(我的电脑-右击属性-高级-环境变量) MYSQL ...
- Oracle笔记 十、PL/SQL存储过程
--create or replace 创建或替换,如果存在就替换,不存在就创建 create or replace procedure p is cursor c is select * from ...
- js,jquery获取下拉框选中的option
js获取select选中的值: var sel=document.getElementById("select1"); var index = sel.selectedIndex; ...
- DOS终端不能使用JAVA命令
DOS 终端 java 命令OK javac 命令OK java version 命令OK 写了小程序HelloWorld 测试 ,文件名HelloWorld.java public class H ...
- jquery 分页控件功能
<script> //分页 function getPageNum(num) { $("#PageNum ul" ...
- DoNet屌丝学Android(一)——Android开发准备工作 & No HelloWord & (真机)调试
先乱扯淡一下吧,本人一.net屌丝,手持Android 4.2.2手机,Win7 x64本本,闲来无聊学习一下Android的开发,至于要开发啥玩意目前没有什么想法,就是想学学,搞不好是三分热度也有可 ...
- hive到hbase的使用
一.简单介绍 hive的元数据保存在metastore里面,真实的数据一般位于hdfs中,可以通过hql来对数据进行分析.hbase中的数据也是存放在hdfs上的,可不可以使用hive来分析hbase ...