重载方法中,数据类型的优先级
今天刷题的时候,刷到了一道题,代码如下:
public class Demo {
public static void go(Long n) {
System.out.println(“Long”);
}
public static void go(Short n) {
System.out.println(“Short”);
}
public static void go(int n) {
System.out.println(“int”);
}
public static void main(String[] args) {
short y = 6;
long z = 7;
go(y);
go(z);
}
}
输出结果
刚开始我选的时候选的是(Short和Long),结果错了,答案是(int和Long),想了很久为什么Short会变成int,然后查了一下资料,就明白了,重载go方法的时候,Long和Short是封装类型,然后int是基本数据类型,但是在重载方法中,参数是包装类的优先级比基本类型的转换还要低,如果将上述代码改成如下
public class Demo {
public static void go(Long n) { //2
System.out.println(“Long”);
}
public static void go(Short n) { //1
System.out.println(“Short”);
}
public static void go(Integer n) {
System.out.println(“int”);
}
public static void main(String[] args) {
short y = 6;
long z = 7;
go(y);
go(z);
}
}
输出结果显示:
输出结果
就可以啦!!!!
ps:方法重写是指子类继承父类的某个方法,那么子类的这个方法的名字,参数类型,参数个数,与父类的方法完全相同
目的:
子类通过方法重写可以隐藏继承的方法,即改变继承的父类方法中具体的参数值,来达到修改自身状态和行为。
注意事项:
重写父类的方法时,不允许降低方法的访问权限,但可以提高访问权限(访问权限从高到低的顺序是:public 、protected 、友好的 、private。友好的是指:不用public 、protect 、private修饰的)
如以下例子:
class A{
protected float f(float x,float y){
return x+y;
}
}
class B extends A{
float f(float x,float y){ //非法,访问权限由protected降低成了友好的
return x-y;
}
}
class C extends A{
public float f(float x,float y){ //合法,访问权限由protected提高到了public
return x*y;
}
}