Java之方法重载(笔记)
Java是根据参数类型和个数的不同实现重载。
1.当参数类型是基本类型,但不完全匹配。
void test(int i) { }
void test(float f) { }
public static void main(String[] args) {
byte b = 1;
test(b);
}
这种情况,会选择哪一个?
以下分析基本数据类型之间的转换顺序:
public class test2 {
public static void main(String[] args) {
byte p1 = 1;
char p2 = 1;
short p3 = 1;
int p4 = 1;
long p5 = 1;
float p6 = 1f;
double p7 = 1d;
param(p1);
param(p2);
param(p3);
param(p4);
param(p5);
param(p6);
param(p7);
}
public static void param(byte b) {
System.out.println("byte");
}
public static void param(char b) {
System.out.println("char");
}
public static void param(short b) {
System.out.println("short");
}
public static void param(int b) {
System.out.println("int");
}
public static void param(long b) {
System.out.println("long");
}
public static void param(float b) {
System.out.println("float");
}
public static void param(double b) {
System.out.println("double");
}
}
通过注释param方法,如注释byte参数的那个方法,看byte参数用哪个param方法。可以发现如下规律:
因此问题的答案是test(int i)。
2.当参数是引用类型
public class test2 {
public static void main(String[] args) {
superClass s = new superClass();
child c = new child();
Object o = new Object();
param(s);
param(c);
param(o);
}
public static void param(Object o) {
System.out.println("object");
}
public static void param(superClass o) {
System.out.println("superClass");
}
public static void param(child o) {
System.out.println("child");
}
}
class superClass {}
class child extends superClass {}
还是用上面的注释法,发现规律如下:
3.参数是包装类或可变参数
public class test2 {
public static void main(String[] args) {
int i = 10;
param(i);
}
public static void param(Integer i) {
System.out.println("Integer");
}
public static void param(int... i) {
System.out.println("int...");
}
public static void param(long b) {
System.out.println("long");
}
public static void param(float b) {
System.out.println("float");
}
public static void param(Object o) {
System.out.println("object");
}
}
发现规律如下:
4.泛型
public class test2 {
public static void main(String[] args) {
test2 test = new test2();
child c = new child();
test.param(c);
}
public <T extends child> void param(T i) {
System.out.println("<T extends child>");
}
public void param(superClass o) {
System.out.println("superClass");
}
public <T> void param(T i) {
System.out.println("<T>");
}
}
可以发现规律:
总结:顺序为
原因:越上面的出现在JDK时间越晚。
Java之方法重载(笔记)的更多相关文章
- Java之方法重载篇(我重载了,你要如何来调用我。。)
一.课前引言 请看一下代码,你发现什么特殊之处了吗? public class MethodOverload { public static void main(String[] args) { ...
- Java基础-方法重载和方法重写的区别
什么是java方法重载 (1) 方法重载是让类以统一的方式处理不同类型数据的一种手段.多个同名函数同时存在,具有不同的参数个数/类型. 重载Overloading是一个类中多态性的一种表现. (2) ...
- java的方法重载
1丶java的方法重载特性 满足以下条件的两个或多个方法构成“重载”关系:(1)方法名相同 (2)参数类型不同,参数个数不同或者参数类型的顺序不同 像System.out.println一样,就是重载 ...
- Java-Runoob-高级教程-实例-方法:01. Java 实例 – 方法重载
ylbtech-Java-Runoob-高级教程-实例-方法:01. Java 实例 – 方法重载 1.返回顶部 1. Java 实例 - 方法重载 Java 实例 先来看下方法重载(Overloa ...
- Java 实例 - 方法重载
先来看下方法重载(Overloading)的定义:如果有两个方法的方法名相同,但参数不一致,哪么可以说一个方法是另一个方法的重载. 具体说明如下: 方法名相同 方法的参数类型,个数顺序至少有一项不同 ...
- Java中方法重载
方法重载:指在同一个类中,允许存在一个以上的同名方法,只要它们的参数列表不同即可,与修饰符和返回值类型无关. 参数列表:个数不同,数据类型不同,顺序不同. 重载方法调用:JVM通过方法的参数列表,调用 ...
- Java面向对象----方法重载
方法重载(over load):方法名相同,参数列表不同,返回类型无关 package com.tanlei.newer; public class OverLoadDemo { public sta ...
- JAVA面向对象 - 方法重载与覆盖
方法重载 方法重载就是在类的同种实现方式,到底采用哪种方式,取决与调用者给出的参数.方法重载特点是方法名相同,方法的参数类型,个数,顺序至少有一项不同,方法返回类型可以不同,方法的修饰符可以不同,只是 ...
- java作业-----方法重载
满足方法重载的条件:1.方法名相同 2.参数类型不同,参数个数不同,参数类型的顺序不同. 同时,方法的返回值不作为方法重载的判断条件.
- 说出几条 Java 中方法重载的最佳实践?
下面有几条可以遵循的方法重载的最佳实践来避免造成自动装箱的混乱. a)不要重载这样的方法:一个方法接收 int 参数,而另个方法接收 Integer 参 数. b)不要重载参数数量一致,而只是参数顺序 ...
随机推荐
- 各浏览器抗uaf机制
今年中旬,微软针对旗下ie浏览器中大量出现的uaf漏洞,对ie浏览器的安全机制进行了一个大幅度的升级,其中主要体现为隔离堆及延迟释放两个机制,顿时又将uaf漏洞的利用向上提升了一个大坎, 但是类似的对 ...
- JavaScript 入门 (1)
一. javascript的调用 JavaScript代码可以直接嵌在网页的任何地方,不过通常我们都把JavaScript代码放到<head>中: <html> <hea ...
- 宫格布局实例(注意jquery的版本号要统一)2
<!DOCTYPE html><html><head><meta charset="utf-8" /><style> * ...
- psql-07表:分区表
表继承与分区表 表继承 表继承是PostgreSQL特有的 create table persons ( age int, sex boolean ); create table students ( ...
- css3 总结02
盒子尺寸 .border-box{ -webkit-box-sizing: border-box; -moz-box-sizing: border-box; border-sizing: border ...
- D7控件\dw_cd_VirtualTreeview_v4.5.2\Demos\Advanced---TVirtualStringTree用法
VST1: TVirtualStringTree; //按钮公用函数,根据不同 标签tag区分, Screen.Cursor := crHourGlass; //设置屏幕鼠标的形状为crhourGla ...
- 数据库的SQL语句创建和主外键删除操作
create table UserType ( Id ,), Name nvarchar() not null ) go create table UserInfo ( Id ,), LoginPwd ...
- Robotium ant 报错Unable to find instrumentation info for: ComponentInfo{project/android.test.InstrumentationTestRunner}
[echo] Running tests ... [exec] INSTRUMENTATION_STATUS: id=ActivityManagerService [exec] INSTRUMENTA ...
- ural 1145. Rope in the Labyrinth
1145. Rope in the Labyrinth Time limit: 0.5 secondMemory limit: 64 MB A labyrinth with rectangular f ...
- 【原】iOS学习38网络之数据解析
1. 解析的基本的概念 解析:从事先规定好的格式中提取数据 解析前提:提前约定好格式,数据提供方按照格式提供数据.数据获取方则按照格式获取数据 iOS开发常见的解析:XML解析.JOSN解析 2. X ...