java中重载一定在一个类里面吗?
虽然这些概念在翻译成中文的过程中,有很多不同的翻译方式
但本质上只有两种说法,就是Override和Overload
其中,Overload一般都被翻译成重载
而Override的翻译就乱七八糟了,所谓覆盖、覆写、重写、改写指的其实都是这个意思
那么为什么会有这么多名词,而不能统一一下呢?
打一个最简单的比喻吧,为什么老婆这个词有这么多叫法?而不能统一一下呢?
这个原因就不用我说了吧呵呵
所以,不管这个单词被翻译成多少种说法
在你学习的过程中,你只需要按照一种你喜欢的说法来使用就可以了
而对于其他的说法,你只需要在看到别人使用的时候
能够知道这跟你使用的某个说法的含义是一样的,就可以了
所以,在这里这个问题可以简化为
Overload和Override定义和区别是什么?
为了方便讲解,在这里我将使用“重载”和“覆盖”这两个名词
其中重载就是Overload,覆盖就是Override,你心里明白就可以了~
下面给出最基本的重载和覆盖的定义吧:
在同一个类中,如果定义了多个方法名相同,但是可以通过参数进行区分的方法,那么这些方法就可以称之为重载
在子类中,如果定义了方法名、参数和返回值都与父类完全相同的方法,那么子类中的这个方法就可以称之为覆盖了父类中的方法
所以,你只需要严格记住以上两个定义,就很容易区分重载和覆盖了
下面就结合上面的定义,再来看看你给出的代码吧:[code=java]class SuperClass {
public void method(int x, double y) {
System.out.println("我是父类SuperClass");
}
public void method(int x) {
System.out.println("我肯定是重载了");
}
}[/code]在这里可以看出,由于method(int x)和method(int x, double y)的方法名相同,但是参数可以区分
所以这两个method就是重载关系
再来看下面这段代码:[code=java]class SubClass1 extends SuperClass {
public void method(int x, double y) {
System.out.println("我重定义了父类SuperClass,即覆盖了父类方法");
}
}[/code]在这里可以看出,由于SubClass1继承了SuperClass
并且SubClass1中定义的void method(int x, double y)这个方法
和SuperClass中定义的void method(int x, double y)方法的方法名、参数和返回值完全相同
所以子类中的这个method就是覆盖了父类中的这个method
好,如果对上面的两段代码的解释你能够看懂的话
那我也来给出一段代码吧,看你能不能看的懂~[code=java]class SubClass3 extends SuperClass {
public void method(int x, double y) {
System.out.println("我是子类Subclass3");
}
public void method(int x) {
System.out.println("我是重载还是覆盖呢?");
}
}[/code]在这段代码中,我们可以看到
由于在SubClass3中定义了两个方法名都为method的方法,所以它们的关系应该是重载
而由于在SuperClass中也定义了两个与它们完全相同的方法,所以它们和SuperClass中方法的关系又是覆盖
那么它们究竟是重载还是覆盖呢?其实在上面的这两句话中,我已经给出答案了
在SubClass3中,这两个方法的关系是重载
和SuperClass中,的这两个的方法的关系是覆盖
所以,你既可以把它们看成是重载,又可以看成是覆盖
区别只在于,你是从什么角度去看它们的
好了,关于重载和覆盖就解释这么多吧
对于为什么要有这两种概念,以及如何去应用它们,这个就只能靠你以后慢慢去体会了呵呵
Tips:
在这里再补充一点小小的细节吧:
什么叫可以通过参数进行区分呢?主要有以下三种区分方式:
1、参数的数量不同,例如method(int)和method(int, int)
2、参数的类型不同,例如method(int)和method(String)
3、参数的顺序不同,例如method(int, String)和method(String, int)
*注意,参数的顺序不同的前提必须是顺序不同的几个参数类型不能一样
例如如果是method(int, int)的话,那么不管怎么改变顺序都无法进行区分的
摘自:原文中一条评论
原文出处:http://bbs.itheima.com/thread-1379-1-1.html
java中重载一定在一个类里面吗?的更多相关文章
- java中重载(overload)与重写(override)的区别
方法重载(overload): 方法重载就是在一个类中可以创建多个方法,它们具有相同的名字,但是具有不同的参数和不同的定义,调用方法时通过传递给它们的不同参数个数和参数类型来决定具体使用哪个方法,这就 ...
- Java中的不可变类理解
一.Java中的不可变类 不可变类(Immutable Objects):当类的实例一经创建,其内容便不可改变,即无法修改其成员变量. 可变类(Mutable Objects):类的实例创建后,可以修 ...
- JAVA中封装JSONUtils工具类及使用
在JAVA中用json-lib-2.3-jdk15.jar包中提供了JSONObject和JSONArray基类,用于JSON的序列化和反序列化的操作.但是我们更习惯将其进一步封装,达到更好的重用. ...
- Java中直接输出一个类的对象
例如 package com.atguigu.java.fanshe; public class Person { String name; private int age; public Strin ...
- Java中Date和Calender类的使用方法
查看文章 Java中Date和Calender类的使用方法 2009-10-04 20:49 Date和Calendar是Java类库里提供对时间进行处理的类,由于日期在商业逻辑的应用中占据着 ...
- Java 中的静态嵌套类和非静态嵌套类
Java 中的静态嵌套类和非静态嵌套类 术语:嵌套类分为两类:静态嵌套类和非静态嵌套类.声明 static 的嵌套类称为静态嵌套类,非静态嵌套类也称为内部类. class OuterClass { p ...
- Java中如何查看一个类依赖的包
Java中如何查看一个类依赖的包 如图, 我如何知道JSONArray是依赖的哪一个包呢,这里有两个json-lib包? 测试语句: public static void main(Strin ...
- 问题009:java当中的关键字有哪些?在Editplus文本编辑软件中是什么颜色的?java当中的标识符有什么要求?Java中注释分为几类?
(1) public 公共的,表示访问的权限 (2) private 私有的,表示一种访问权限 (3) class 类关键字,表示定义一个类 java中的关键字都是大写的还是小写的?小写的,在Edit ...
- Java 中常见的 final 类
Java 中常见的 final 类 java.lang 包 public final class Boolean extends Object implements Serializable, Com ...
随机推荐
- 近期对FTP及Excel数据处理的一些摸索
一个多月没写随笔了,主要是发的东西,自己感觉也很垃圾,说又说回来,谁不是从垃圾变强的,所以不比比,还得努力.come on!! Python学习也有段时间了,近期为了解决同事的一个难题,所以我们决定联 ...
- JAVA9模块化详解(二)——模块的使用
JAVA9模块化详解(二)--模块的使用 二.模块的使用 各自的模块可以在模块工件中定义,要么就是在编译期或者运行期嵌入的环境中.为了提供可靠的配置和强健的封装性,在分块的模块系统中利用他们,必须确定 ...
- Android项目实战(三十五):多渠道打包
多渠道打包: 可以理解为:同时发布多个渠道的apk.分别上架不同的应用商店.这些apk带有各自渠道的标签,用于统计分析各个商店的下载次数等数据. 实现步骤 一.添加友盟渠道标签 添加位置:app目录下 ...
- 利用MJModel解决关键字
#import "CJAddressModel.h" @implementation CJAddressModel +(NSDictionary *)mj_replacedKeyF ...
- SourceTree for Mac 破解版
soureTree For mac 破解版下载地址:链接: https://pan.baidu.com/s/1c19kFRi 密码: ai7f
- 解决vue.js修改数据无法触发视图
data:{checkValue:{}}that.checkValue[key] = [] 赋值无法实时改变变量:(数据其实最终被修改,但是并没有触发检测从而更新视图)原因:Vue 不能检测到对象属性 ...
- python学习日记:day11----装饰器进阶
1.wraps from functools import wraps def wrapper(func): #func = holiday @wraps(func)#输出holiday的函数名 de ...
- Panel控件的使用
我们对控件进行分组的原因不外乎三个: 1.为了获得清晰的用户界面而将相关的窗体元素进行可视化分组. 2.编程分组,如对单选按钮进行分组. 3.为了在设计时将多个控件作为一个单元来移动. 在vb.net ...
- ORACLE环境变量设置
用oracle帐号登录,配置相关环境变量: vi .bash_profile export ORACLE_BASE=/u01/app/oracleexport ORACLE_HOME=/u01/app ...
- 开发过程遇到的bug
1.transition和display的冲突: 解决方法:1)使用visibility:2)使用js的setTimeout使动画延迟:3)可以改变高度: 2.form表单提交和js中的提交冲突 解决 ...