方法的重载:
方法重载,这在我们生活中也是常见的的。比如说洗衣服,洗汽车。这两种动作都是洗,但我我们发现,我们并没有说用洗衣服的方式洗衣服,用洗汽车的方式去洗汽车。我们可以根据不同的语境来判断不同的动作行为。同样我们在程序中有如何让计算机也具备同样的功能呢——方法的重载。
public OverLoading{
}class Number{
void test(int i){
System.out.println("i的值为"+i);
}
void test(String str){
System.out.println("str");
}
void test(int i,int b){
int c=i+b;
System.out.println("i+b的值为"+c);
}
}
public class OverLoading {
public static void main(String[] args) {
Number number = new Number();
number.test(1);
number.test(3,4);
number.test("方法的重载");
}
}
我们发现,通过上面的代码可以看出,同一个test()方法,却能执行出不同的行为。这种情况就叫做方法的重载。同样的,一个类中的构造方法我们也可进行重载
class Tree{
Tree(int a){
System.out.println("这课树长了"+a+"米");
}
Tree(String name){
System.out.println("这课树叫"+name+"树");
}
}
public class OverLoading2 {
public static void main(String[] args) {
Tree tree = new Tree(12);
Tree tree1 = new Tree("杨树");
}
}
我们发现,我们在创建同一个对象的不同引用时,进行不同的初始化操作,会去自动找到响应的有参构造方法。
区分重载方法
这个时候我们都应该非常好奇,java是如何根据同一个方法名来判断出来我们需要执行的方法呢?我们发现每一个重载的方法都有一个独一无二的参数类型列表。所以说,正是因为这些参数类型不同,java才可以去重载方法。甚至说,每个参数的位置不同也是区份两个方法的原因,但那样会使我们的代码变的不容易维护。所以,一般我们不这样去做。
返回值来区分:
我看可能也会想到,方法的返回值应该也可以去作为区分的依据。我们看下面的代码
void f(){};
int f(){return 1;}
如果这个时候我们调用f()方法的时候,此时java该如何去进行一个判断呢。这些写的话别人有该怎样去理解呢?所1以我们不这样去区分重载方法,所以如果我们这样书写,那编译器也不会给我们通过的。
基本类型的重载。
基本类型会重较小的类型自己动转化成较大类型,那么这个过程如果涉及到重载中呢?我们来看下面的列子
public class Demotion {
static void f(char x){
System.out.println("char类型");
}
static void f(byte x){
System.out.println("byte类型");
}
static void f(short x){
System.out.println("short类型");
}
/*static void f(int x){
System.out.println("int类型");
}*/
static void f(long x){
System.out.println("long类型");
}
static void f(float x){
System.out.println("float类型");
}
static void f(double x){
System.out.println("double类型");
}
public static void main(String[] args) {
int i=7;
f(i);
}
}
- 在上面的代码中,我们设置了一个int类型的变量i,同时,我们同f(int x)这个方法给他注释掉我们运行发现输出为“long类型”,所以我们可以发现。当我把一个较小类型的参数,传给到一个较大类型的方法里面,那么他会自动提出为较大的类型。如果这个时候我们传入的类型大于方法中的类型呢?我们把方法中的参数类型为char的代码注释掉。同时把int 类型变为char。此时为发现,程序会报错,需要我进行强制类型转化。