美文网首页程序员
java继承之方法覆盖

java继承之方法覆盖

作者: 是归人不是过客 | 来源:发表于2020-08-28 12:52 被阅读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

    相关文章

      网友评论

        本文标题:java继承之方法覆盖

        本文链接:https://www.haomeiwen.com/subject/wzqlsktx.html