JAVA多肽(重写与重载)

多肽:一个对象的多种形态。

1.重写

动态绑定机制:JVM在执行对象的成员方法时,会将这个方法和对象的实际内存进行绑定,然后调用。
动态绑定机制和变量没有关系,只和方法有关系。

public class test {
    public static void main(String[] args) {
        AA aa=new BB();
        System.out.println(aa.getResult());
    }
}

 class AA{
    public int i=10;
    public int getResult(){
        return i+10;
    };
}

class BB extends AA{
    public int i=20;
    public int getResult(){
        return i+20;
    };
}
结果:40
分析:JVM找到了子类BB的getResult方法进行执行
public class test {
    public static void main(String[] args) {
        AA aa=new BB();
        System.out.println(aa.getResult());
    }
}

 class AA{
    public int i=10;
    public int getResult(){
        return i+10;
    };
}

class BB extends AA{
    public int i=20;
}
结果:20
分析:JVM没有找到子类BB的getResult方法,所以调用父类AA的方法进行执行
public class test {
    public static void main(String[] args) {
        AA aa=new BB();
        System.out.println(aa.getResult());
    }
}

 class AA{
    public int i=10;
    
    public int getResult(){
        return getI()+10;
    };

     public int getI(){
         return i;
     };
}

class BB extends AA{
    public int i=20;
    public int getI(){
        return i;
    };
}

结果:30
分析:JVM没有找到子类BB的getResult方法,所以调用父类AA的方法进行执行,但方法中被BB重写,则调用BB的getI方法

2.重载

方法名:必须相同
形参列表:必须不同(形参类型或个数或顺序,至少有一样不同,参数名无要求)
返回类型:无要求

public class test2 {
    public static void main(String[] args) {

        CC h=new DD();
        test(h);
    }

    static void test(CC cc){
        System.out.println("ccc");
    }

    static void test(DD cc){
        System.out.println("ddd");
    }
}

class CC{

}

class DD extends CC{
}
结果:ccc
分析,因为h是cc类型的,只有第一个方法的类型是CC
public class test2 {
    public static void main(String[] args) {

        Byte i=10;
        test(i);
    }
    
    static void test(char cc){
        System.out.println("ccc");
    }

    static void test(short sss){
        System.out.println("sss");
    }

    static void test(Byte bbb){
        System.out.println("bbb");
    }

    static void test(int iii){
        System.out.println("iii");
    }
}
结果:bbb
分析:i为Byte类型
public class test2 {
    public static void main(String[] args) {

        Byte i=10;
        test(i);
    }

    static void test(char cc){
        System.out.println("ccc");
    }

    static void test(short sss){
        System.out.println("sss");
    }

//    static void test(Byte bbb){
//        System.out.println("bbb");
//    }

    static void test(int iii){
        System.out.println("iii");
    }
}
结果:sss
分析:当我们调用byte形参的方法,却没有找到时,byte=一个字节(8位),会扩大精度进行升级,这个时候找到了short方法

基本类型传递给重载方法,有个规则

byte->short->int->long->float->double
short->int->long->float->double
char->int->long->float->double
指的就是byte、char、short等"较小"类型能自动转换成较大的类型作为入参,而不需要额外的其他操作

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值