日期:2017/10/10
Java学习不含糊(1)
一、方法的重载
狠抓了一个国庆黄金周,java基础中的基础(数据结构--数组,类型--primitive数据,类的属性--class,成员变量,方法调用和传递参数;结构化--if..else../while.../for.../swith....case...default...break...)已经打牢。之前有python的经验,给一分钟装逼的话,确实对“语言是一个工具”这句话有点独特见解,但碍于造诣不深,还是继续埋头苦干,不吹哔哔。
1. 方法的重载:
1.1 在Github下了一个教程版的java代码,里面的定义如下(精辟!):
在同一个类中,方法名相同,参数列表不同的方法。参数列表不同:个数不同,数据类型不同与返回值类型无关。
那不就乱套了吗!?函数名都能一样,,在C语言要被打死的。C++/Java 支持函数重载而C语言不支持函数重载。(为啥?参考博文:http://blog.csdn.net/FX677588/article/details/70207794;)
方法重载代码如下:
package com.object;
/*
* 比较两个数据是否相等。参数类型分别为两个byte类型,两个short类型,
两个int类型,两个long类型,并在main方法中进行测试
* */
/*
* 方法重载:
在同一个类中,允许存在一个以上的同名方法,只要它们的参数个数或者参数类型不同即可。
和返回值类型无关。
* */
public class MethodRestructure {
public static void main(String[] args){
//test
byte a = 10;
byte b = 10;
short a1 = 233;
short b1 = 766;
System.out.println(compare(a1,b1)+" 0");
System.out.println(compare(a,b)+" 1");
System.out.println(compare(10,10)+" 2");
}
//byte
public static boolean compare(byte a,byte b){
System.out.print("byte ");
return a == b;
}
//short
public static boolean compare(short a,short b){
System.out.print("short ");
return a == b;
}
//int
public static boolean compare(int a,int b) {
System.out.print("int ");
return a == b;
}
//long
public static boolean compare (long a,long b){
System.out.print("long ");
return a == b;
}
}
1.2 其实恰恰相反,方法的重载大大促进了代码的复用和适用场景。当然也有很多的误区,比如造成方法重载的条件看起来就比较复杂了,有大牛总结的很好了(
http://blog.csdn.net/shippingxing/article/details/47042627 ,感谢助攻)。
1.2.1 对于两个方法,如果只有返回值不同,那么不构成重载,程序会报错。
class A{
public void cry()
{
......
}
public int cry()
{
return 0;
}
}1
2
3
4
5
6
7
8
9
10
1.2.2 对于两个方法,如果只有访问修饰符不同,那么不构成重载,程序会报错。
class A{
public void cry()
{
......
}
protected int cry()
{
......
}
}1
2
3
4
5
6
7
8
9
10
1.2.3 对于两个方法,如果只是参数命名不同,那么不构成重载,程序会报错。
class A{
public void cry(int a)
{
......
}
protected int cry(int b)
{
......
}
}
1.3 方法重载的同时,同名方法也是可以互相调用的!见下面的代码:
package com.object;
public class MethodRestructureSum {
public static void main(String[] args){
//需求:请写一个功能,实现两个数据的求和
System.out.println(sum(10,20));
//需求:请写一个功能,实现三个数据的求和
//System.out.println(sum2(10,20,30));
System.out.println(sum(10,20,30));
System.out.println(sum(1.5,2.5));
System.out.println(sumNest(10,20,30));
}
public static int sum(int a,int b){
System.out.print("Int Result : "+a +"+"+b+" = ");
return a+b;
}
public static int sum(int a,int b,int c){
System.out.print("Int Result : "+a +"+"+b+"+"+c+ "= ");
return a+b+c;
}
public static double sum(double a,double b){
System.out.print("Double Result : "+a +"+"+b+ "= ");
return a+b;
}
public static int sumNest(int a,int b,int c){
System.out.print("Int Nest Result : "+a +"+"+b+"+"+c+ "= ");
int result = sum((a + b),c);
return result;
}
}
Java的方法重载还有很多的运用,待续。。
END.