方法重写也叫方法覆盖,需要满足以下条件:

    1. 子类方法的方法形参列表、方法名称要和父类方法的参数、方法的名称完全一样。
    2. 子类方法的返回类型和父类方法的返回类型一样,或者是父类返回类型的子类,比如父类返回类型时Object,子类返回类型是String
    3. 子类方法不能缩小父类方法的访问权限(可以扩大权限)。(public > protect > 默认 > private)
    1. package override_TY;
    2. public class Animal {
    3. public void cry() {
    4. System.out.println("动物叫唤..");
    5. }
    6. public Object m1() {
    7. return null;
    8. }
    9. public String m2() {
    10. return null;
    11. }
    12. public AAA m3() {
    13. return null;
    14. }
    15. protected void eat() {
    16. }
    17. }
    1. package override_TY;
    2. public class Dog extends Animal{
    3. //1. 因为Dog 是 Animal子类
    4. //2. Dog的 cry方法和 Animal的 cry定义形式一样(名称、返回类型、参数)
    5. //3. 这时我们就说 Dog的cry方法,重写了Animal的cry方法
    6. @Override
    7. public void cry() {
    8. System.out.println("小狗汪汪叫..");
    9. }
    10. //细节: 子类方法的返回类型和父类方法返回类型一样,
    11. // 或者是父类返回类型的子类比如 父类 返回类型是 Object ,
    12. // 子类方法返回类型是String
    13. @Override
    14. public String m1() {
    15. return null;
    16. }
    17. // 这里Object 不是 String的子类,因此编译错误
    18. // public Object m2() {
    19. // return null;
    20. // }
    21. @Override
    22. public AAA m3() {
    23. return null;
    24. }
    25. // @Override
    26. // public BBB m3() {
    27. // return null;
    28. // }
    29. //细节: 子类方法不能缩小父类方法的访问权限(可以扩大权限)
    30. // public > protected > 默认>private
    31. @Override
    32. public void eat() {//或者protected void eat(){}
    33. }
    34. //错误写法
    35. // @Override
    36. // void eat() {}
    37. // @Override
    38. // private void eat() {}
    39. }
    40. class AAA {
    41. }
    42. class BBB extends AAA {
    43. }
    1. package override_TY;
    2. public class Override01 {
    3. public static void main(String[] args) {
    4. //演示方法重写的情况
    5. Dog dog = new Dog();
    6. dog.cry();//ctrl+b查找定位方法
    7. }
    8. }

    image.png