Java之方法的重写、重载、泛型

1.方法重载:发生在编译时。方法的重载也被称为编译时多态,因为编译器可以根据参数的类型来选择使用哪个方法。

public class{
               public static void fun(String param1); //方法1
               public static void fun(int param1);    //方法2
            }
如果编译器在编译下面的语句:

fun("My Test");
它会根据传入的参数是字符串常量,生成调用方法1的字节码

2.方法覆盖:这个是在运行时发生的。方法的覆盖被称为 运行时多态,因为编译期间编译器不知道并且没法知道该去调用哪个方法(因为是方法的重写,两个方法都一模一样,编译器无法分辨出该调用哪个方法)。JVM会在代码运行的时候做出决定。

public class A{
               public int compute(int input){   //方法3
                    return 3*input;
               }
          }
          
          public class B extends A{
               @Override
               public int compute(int input){   //方法4
                    return 4*input;
               }
          }

子类B中的compute(...)方法重写了父类的compute(...)方法。如果编译器遇到以下代码:

public int fun(A reference,int arg2){
               int result = reference.computer(arg2);
          }
编译器是没办法知道传入的参数reference的类型是A还是B。因此,只能够在运行时,根据赋给输入变量“reference”的对象的类型(例如,是A的实例还是B的实例)来决定调用方法3还是方法4.
3.泛型(又称为类型检验):这个是发生在编译期间的。 编译期负责检查程序中类型的正确性,然后把使用了泛型的代码翻译或重写成可以执行在当前JVM上的非泛型代码。这个技术被称为“ 类型擦除”。换句话说,编译器会擦除所有尖括号里的类型信息,来保证更早版本的JRE的兼容性
List<String> mylist = new ArrayList<String>(10);
编译后成为了:

List mylist = new ArrayLit(10);



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值