程序员

java继承之方法覆盖

2020-08-28  本文已影响0人  是归人不是过客

总结:

1、什么时候要进行重写?

如果父类的方法已经无法满足当前子类的方法,需要将父类的方法重新写一边

2、子类如果重写父类中的方法之后,子类一定调用重写后的方法

3、发生方法覆盖的条件:

第一:发生在具有继承关系的两个类之间(重载是一个类中哦!)

第二:必须具有相同的方法名,相同的返回值类型、相同的参数列表

第三:重写的方法不能比被重写的方法拥有更低的访问权限。(可以更高)

第四:重写的方法不能比被重写的方法抛出更宽泛的异常。

第五、私有的方法不能被覆盖

第六:构造方法无法被覆盖(因为构造方法无法被继承)

第七:静态的方法不存在覆盖

第八:覆盖指的是成员方法,和成员变量无关

4、继承最基本的作用:代码重用
---- 继承最重要的作用:方法重写

简单举个栗子:

public class p{
    public static void main(String [] args) {
        Cat c = new Cat();
        c.move();
    }
}
class Animal{
    public void move() {
        System.out.println("move");
    }
}
class Cat extends Animal{
    
    // Cat 应该在 move中输出猫步
//  所以要在Animal类中的move方法中进行重定义,覆盖
    public void move() {
        System.out.println("kitty move");
    }
//  void move() {   
//      System.out.println("kitty move"); //Cannot reduce the visibility of the inherited method from Animal
//  }
}

输出:kitty move

再举个栗子:

私有方法无法被覆盖

public class p{
    private void m1() {
        System.out.println("in p m1...");
    }
    public static void main(String [] args) {
        p a = new B();
        a.m1();
    }
}
class B extends p{
    public void m1() {
        System.out.println("in B m1...");
    }
}

输出:in p m1...

最后举个栗子:

** 静态方法不存在被覆盖**

public class p{
    public static void m1() {
        System.out.println("in p m1...");
    }
    public static void main(String [] args) {
        p a = new B(); // 静态方法的执行与对象无关
        a.m1();
    }
}
class B extends p{
    // 尝试重写父类的静态方法
    public static void m1() {
        System.out.println("in B m1...");
    }
}

输出:in p m1...

sea
上一篇下一篇

猜你喜欢

热点阅读