重载、重写

一个(无法覆盖,返回类型与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

你可能感兴趣的:(Java)