Chapter5_初始化与清理_方法重载
2024-08-26 20:00:07
方法重载是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类型。如果方法接受的数据类型比参数列表中声明的小,会通过窄化转化来执行操作。
最新文章
- IOS自学
- Java Little Knowledge
- WPF 中获取DataGrid 模板列中控件的对像
- django 创建数据库表的linux命令
- 在Windows 上安装SQL Server的一些注意事项
- response对象详解
- SpringMVC关于json、xml自动转换的原理研究[附带源码分析 --转
- OGG问题 ORA-01403的处理办法
- C#有关 字符串方法的使用
- 表达式树动态拼接lambda
- (转)生产者/消费者问题的多种Java实现方式 (待整理)
- angular smart-table组件如何定制化之初步研究
- NYOJ街区最短路径问题
- Linux下运行当前目录需要加./的原因
- anaconda 命令集合
- C#提取PPT文本——提取SmartArt中的文本、批注中的文本
- AFNetworking封装-项目使用
- Vue自定义指令,ref ,sync,slot
- 【HDU1693】Eat the Trees(插头dp)
- NodeMCU入门(1):刷入At固件,透传数据到TcpServer和Yeelink平台
热门文章
- OS模块学习
- 深度原理与框架-图像超分辨重构-tensorlayer
- Rocket MQ 2 - Namesrv
- JavaScript遍历集合(for...of/for...in/forEach)
- gradle用户目录本地库移动设置
- 使用kettle 的repository
- Java框架spring Boot学习笔记(五):Spring Boot操作MySQL数据库增、删、改、查
- Java框架spring 学习笔记(二):Bean的作用域
- 《Orange‘s》Loader
- jmeter-用户定义的变量