重载、重写

一个(无法覆盖,返回类型与void不兼容return type is incompatible)问题的引发

重写:(发生在继承,父子关系)
  1. 方法名相同
  2. 参数个数和类型完全相同(完全相同)
  3. 返回类型相同
  4. 子类不能抛出比父类的异常大也不能抛出新的异常
  5. 访问权限不能小于父类的
  6. 父类final方法不能重写(final修饰的类也不能继承)
  7. 子类中必须重写父类中的abstract方法
重载:(发生在同一个类中)
  1. 满足方法名相同
  2. 满足参数类型、参数个数和参数顺序不一样
  3. 返回类型可以相同也可以不同,无法以返回型别作为重载函数的区分标准(返回值不能判定是否是重载)

#######################

注意点 :

1.同一个类同不能出现名称一样方法

例如:

public void test(){};
public int  test(){
   return 0;
};

这样不是重载,特别注意容易发生在父子继承时

例如:

public class A{
    public void test(){};
}
public class B extend A{
    public int test(){
        return 0;
    };
}

这样是编译不过的,这样并不是重载。B继承A,B隐性就会含有A的test方法,你要么重载要么重写,返回类型不能作为重载的依据,所以它不是重载,只是一个普通的方法,同时他继承的父类的同名方法,同一个类中就会出现两个名字相同的方法,所以编译不过

参考以下题目
https://www.nowcoder.com/questionTerminal/3f4af0f48392470c9493493741be0897

同样lombok中的@Accessors(chain = true)支持链式调用 。 在继承父类的时候,父类的属性的set方法和子类的set方法的冲突,也是出现同样问题
在这里插入图片描述
无法覆盖,返回类型与void不兼容return type is incompatible

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
重载(Overloading)和重写(Overriding)是Java中两个重要的方法相关的机制。 重载是指在一个类中定义多个方法名相同但参数列表不同的方法。重载方法通过参数的类型、个数或顺序的不同来区分。在Java中,编译器会根据调用的方法的参数类型来确定具体调用哪个重载方法。重载方法并不会改变方法的返回值类型。 重载的实现原理是通过在编译阶段静态绑定生成不同的字节码来实现。编译器会根据调用方法的参数类型和数量的不同来选择合适的方法。 重写是指子类中定义一个与父类中方法名、返回值类型和参数列表完全相同的方法,并在该方法内部提供新的实现。重写方法通过动态绑定在运行时确定具体调用哪个方法。重写方法必须与父类方法具有相同的返回值类型或其子类型。 重写的实现原理是通过在运行时动态绑定在方法调用时确定具体调用的方法。在调用重写方法时,Java虚拟机会根据实际对象的类型来选择合适的方法。 Java中的方法表是一个用于存储类的方法信息的数据结构,包括方法名、返回值类型、参数列表、访问修饰符等。每个类都有一个方法表来记录其方法的信息。 当调用一个方法时,Java虚拟机会根据方法的调用方式(静态绑定还是动态绑定)来查找方法表,找到对应的方法并执行。对于重载方法,Java虚拟机会根据方法的参数类型来选择合适的重载方法。 总结起来,重载重写Java中处理方法多态性的两个机制。重载通过编译器的静态绑定实现,重写通过运行时的动态绑定实现。方法表是记录类方法信息的数据结构,用于在方法调用时确定具体的方法。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值