方法的定义:方法名称,返回值,参数列表,修饰符(权限修饰符,final,static),实现体。
参考自:《Java 程序设计与工程实践》
方法的签名:
唯一区别其他方法的元素:(1)方法名称;(2)参数类型列表(参数顺序和类型)。这就是方法的签名。
方法的签名不包括方法的返回值。虽然每个重载方法可以有不同的返回类型,但返回类型并不足以区分所使用的是哪个方法。
example:(1)public void on(){}
public int on(){};这样两个方法编译器依然认为是相同的方法,不可以同时定义在一个类中。
(2)pubic void on(){}
private void on(){};方法的修饰符不同,但编译器认为是相同的方法,不可以定义在同一个类中。
(3)public void on(int a,int b){}
public void on(int b,int a){};仅仅是参数名称不同。
重载:
一个类中相同方法名但参数类型列表不同的方法,即可称为重载。
example:public class Light{
public void on(){}
public void on(int color){}
}
重载技术实际上更多是因为抽象和描述问题的需要存在的。如果都是开灯,但是仅仅是因为具体细节不同,而要申明多个不同名称的函数,这样整个代码的可读性就变差了。
example:
常用在控制台中打印符号的System.out.println()打印函数。它有多种重载。
public void println();
public void println(boolean x);
public void println(char x);等等。
example:
构造函数使用重载函数,它可能是产生重载技术的原因。
public class Light{
public Light(){}
public Light(int color){}
public static void main(String[] args){
Light light = new Light();
Light light = new Light(10);}
}
new对象的时候,后面必须是类的名称,再后面的括号表示调用构造函数,函数的参数类型列表唯一区分了调用的构造函数。
函数重载的设计问题:
重载不用刻意使用,在设计和编程过程中自然而然就会想到根据功能定义行为的名称,相同功能的行为自然就定义相同的函数名称。
example:
功能类似,函数接受的参数也相同。
public void on(int color);
public void on(int wattage);
在函数签名上看似相同,但编译器无法区分这两个函数,出现编译错误。
解决:将其中一个函数改名;