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 ...
随机推荐
- 【Scala-ML】使用Scala构建机器学习工作流
引言 在这一小节中.我将介绍基于数据(函数式)的方法来构建数据应用.这里会介绍monadic设计来创建动态工作流,利用依赖注入这种高级函数式特性来构建轻便的计算工作流. 建模过程 在统计学和概率论中, ...
- BZOJ 1211 HNOI2004 树的计数 Prufer序列
题目大意:给定一棵树中全部点的度数,求有多少种可能的树 Prufer序列.详细參考[HNOI2008]明明的烦恼 直接乘会爆long long,所以先把每一个数分解质因数.把质因数的次数相加相减.然后 ...
- Ubuntu1204 vim中文乱码解决方法
加入中文字符编码 sudo vi /var/lib/locales/supported.d/local #加入以下的中文字符集 zh_CN.GBK GBK zh_CN.GB2312 GB2312 zh ...
- 【java设计模式】【创建模式Creational Pattern】建造模式Builder Pattern
package com.tn.pattern; public class Client { public static void main(String[] args) { Director dire ...
- android 串口开发第二篇:利用jni实现android和串口通信
一:串口通信简介 由于串口开发涉及到jni,所以开发环境需要支持ndk开发,如果未配置ndk配置的朋友,或者对jni不熟悉的朋友,请查看上一篇文章,android 串口开发第一篇:搭建ndk开发环境以 ...
- 利用jquery实现电商网站常用特效之:五星评分
这篇文章主要为大家详细介绍了基于jquery实现五星好评,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 在电商网站,我们经常会用到五星评分的功能,现在用jQuery实现一个简单的demo: 1.引 ...
- 基于阿里云的MQTT远程控制
好久没有写博客了,眼看自己的项目就要快做完了,先分享一下基于MQTT的远程控制,自己买了一个阿里的云端,然后在云端上安装了一个MQTT服务器,其实是一不小心买了两个,所以准备贡献出来一个供大家使用, ...
- bzoj 3597: [Scoi2014]方伯伯运椰子
Description Input 第一行包含二个整数N,M 接下来M行代表M条边,表示这个交通网络 每行六个整数,表示Ui,Vi,Ai,Bi,Ci,Di 接下来一行包含一条边,表示连接起点的边 Ou ...
- JS画几何图形之五【过圆外一点作切线】
样例:http://www.zhaojz.com.cn/demo/draw9.html 依赖:[点].[直线].[圆] //画切线 //point 圆外的一点 //dot 圆心 //r 半径 func ...
- Java自己动手写连接池二
读取数据库文件,来操作: package com.kama.cn; import java.sql.Connection;import java.sql.DriverManager;import ja ...