日期:2014-05-20  浏览次数:20721 次

关于基本类型的重载请教各位
package test;

import com.bruceeckel.simpletest.*;

public class Demotion {
static Test monitor = new Test();
void f1(char x){System.out.println("f1(char)");}
void f1(byte x){System.out.println("f1(byte)");}
void f1(short x){System.out.println("f1(short)");}
void f1(int x){System.out.println("f1(int)");}
void f1(long x){System.out.println("f1(long)");}
void f1(float x){System.out.println("f1(float)");}
void f1(double x){System.out.println("f1(double)");}

void f2(char x){System.out.println("f2(char)");}
void f2(byte x){System.out.println("f2(byte)");}
void f2(short x){System.out.println("f2(short)");}
void f2(int x){System.out.println("f2(int)");}
void f2(long x){System.out.println("f2(long)");}
void f2(float x){System.out.println("f2(float)");}

void f3(char x){System.out.println("f3(char)");}
void f3(byte x){System.out.println("f3(byte)");}
void f3(short x){System.out.println("f3(short)");}
void f3(int x){System.out.println("f3(int)");}
void f3(long x){System.out.println("f3(long)");}


void f4(char x){System.out.println("f4(char)");}
void f4(byte x){System.out.println("f4(byte)");}
void f4(short x){System.out.println("f4(short)");}
void f4(int x){System.out.println("f4(int)");}


void f5(char x){System.out.println("f5(char)");}
void f5(byte x){System.out.println("f5(byte)");}
void f5(short x){System.out.println("f5(short)");}

void f6(char x){System.out.println("f6(char)");}
void f6(byte x){System.out.println("f6(byte)");}

void f7(char x){System.out.println("f7(char)");}

void f8(double x){System.out.println("f8(double)");}
void f8(long x){System.out.println("f8(long)");}
void f8(int x){System.out.println("f8(int)");}
void f8(short x){System.out.println("f8(short)");}

void f9(long x){System.out.println("f9(long)");}
void f9(short x){System.out.println("f9(short)");}

void f10(long x){System.out.println("f10(long)");}
void f10(int x){System.out.println("f10(int)");}//不加这条语句时却输出long型,为什么
void f10(short x){System.out.println("f10(short)");}
// void f10(byte x){System.out.println("f10(byte)");}//不加这条语句时输出型为short,加时为int,这是为什么,跟类型转换原则相左吗?
// void f10(char x){System.out.println("f10(char)");}//加这条语句输出型为short,不加时也为short,又是为什么

//测short
void f11(float x){System.out.println("f11(float)");}
void f11(int x){System.out.println("f11(int)");}
void f11(long x){System.out.println("f11(long)");}

void testDouble(){
double x = 0;
System.out.println("double argument:");
f1(x);f2((float)x);f3((long)x);f4((int)x);f5((short)x);f6((byte)x);f7((char)x);
}
void testFloat(){
float x = 0;
System.out.println("float argument:");
//新加了f8(),f10()
f1(x);f2(x);f3((long)x);f4((int)x);f5((short)x);f6((byte)x);f7((char)x);f8(x);f10((byte)x);//应该是这里有问题,换成这条语句就会出现上面的情况
// f1(x);f2(x);f3((long)x);f4((int)x);f5((short)x);f6((byte)x);f7((char)x);f8(x);f10((short)x);//但是其他地方也这样对换的话不会出现这种情况
}
void testLong(){
long x = 0;
System.out.println("long argument:");
f1(x);f2(x);f3(x);f4((int)x);f5((short)x);f6((byte)x);f7((char)x);
}
void testInt(){
int x = 0;
System.out.println("int argument:");
//新加了f9()
f1(x);f2(x);f3(x);f4(x);f5((short)x);f6((byte)x);f7((char)x);f9(x);
}
void testShort(){
short x = 0;