方法重载是java中编译器在方法调用时采用的一个重要机制。起初方法重载的初衷是方便构造器的调用,比如对于一个类,可以实现用不同的方法来初始化它,又由于构造器的名称都是一样的,所以必须使用到方法重载的机制,并且这种机制不仅限于构造器方法。下面这个例子提供了方法重载的构造器和一般方法的例子。  

 class tree{
int height;
tree(){
System.out.println("无参数构造器");
} tree(int height){
this.height = height;
System.out.println("带参数构造器 " + height);
} public void info(){
System.out.println("height " + this.height);
} public void info(int height){
System.out.println("height " + height);
}
} public class test {
public static void main(String[] args){
tree t1 = new tree();
tree t2 = new tree(10); t1.info(10);
t2.info();
}
}

  输出如下:

无参数构造器 带参数构造器 10 height 10 height 10

  上面的例子定义了两对重载的方法,分别是构造器方法和显示一些信息的一般方法,很容易看到,重载方法的区分规则很简单:每个重载方法都要有独一无二的参数类型列表,并且参数顺序不同的方法也可以进行区分。要注意的是,不同的是参数类型列表,这说明类型的顺序必须不同,如果类型顺序相同,仅仅是定义时的变量名不同,这样也是不行的。下面是一些演示。

 class tree{
int height;
tree(){
System.out.println("无参数构造器");
} tree(int height){
this.height = height;
System.out.println("带参数构造器 " + height);
} public void info(String s, int height){
System.out.println(s + height);
} public void info(int height, String s){
System.out.println(s + height);
} /*public void info(int height, String s2){
System.out.println(s2 + height);
}
报错!*/
} public class test {
public static void main(String[] args){
tree t1 = new tree();
tree t2 = new tree(10); t1.info(10,"height ");
t1.info("height ", 10);
}
}

  输出:

无参数构造器 带参数构造器 10 height 10 height 10

  这很显然证明了之前的论述,重要的是对参数类型列表的理解。另外需要注意的是用返回值来区分重载方法是不可取的,编译器并未对这个机制提供实现,原因是在编程中,许多人会关注方法的内容,即它们完成了什么事情,而非关注方法的返回值,这被称为“为了副作用而副作用”。

  另一个问题就是在方法重载过程中涉及到的类型转化的问题。如果被传入的数据类型小于方法声明中的参数类型,实际数据类型就会被提升,对于char型如果无法找到接受char型参数的方法,会被提升至int类型。如果方法接受的数据类型比参数列表中声明的小,会通过窄化转化来执行操作。

最新文章

  1. IOS自学
  2. Java Little Knowledge
  3. WPF 中获取DataGrid 模板列中控件的对像
  4. django 创建数据库表的linux命令
  5. 在Windows 上安装SQL Server的一些注意事项
  6. response对象详解
  7. SpringMVC关于json、xml自动转换的原理研究[附带源码分析 --转
  8. OGG问题 ORA-01403的处理办法
  9. C#有关 字符串方法的使用
  10. 表达式树动态拼接lambda
  11. (转)生产者/消费者问题的多种Java实现方式 (待整理)
  12. angular smart-table组件如何定制化之初步研究
  13. NYOJ街区最短路径问题
  14. Linux下运行当前目录需要加./的原因
  15. anaconda 命令集合
  16. C#提取PPT文本——提取SmartArt中的文本、批注中的文本
  17. AFNetworking封装-项目使用
  18. Vue自定义指令,ref ,sync,slot
  19. 【HDU1693】Eat the Trees(插头dp)
  20. NodeMCU入门(1):刷入At固件,透传数据到TcpServer和Yeelink平台

热门文章

  1. OS模块学习
  2. 深度原理与框架-图像超分辨重构-tensorlayer
  3. Rocket MQ 2 - Namesrv
  4. JavaScript遍历集合(for...of/for...in/forEach)
  5. gradle用户目录本地库移动设置
  6. 使用kettle 的repository
  7. Java框架spring Boot学习笔记(五):Spring Boot操作MySQL数据库增、删、改、查
  8. Java框架spring 学习笔记(二):Bean的作用域
  9. 《Orange‘s》Loader
  10. jmeter-用户定义的变量