美文网首页
方法的重写(覆盖)与Super关键字

方法的重写(覆盖)与Super关键字

作者: 雪燃归来 | 来源:发表于2022-02-08 10:22 被阅读0次

    一、方法重写(overriding method)

        在Java中,子类可继承父类的方法,而不需要重新编写相同的方法。但有时间子类并不想原封不动的继承父类的方法,而是想做一定的修改,这就需要采用方法的重写,方法的重写也叫方法的覆盖。
        在子类和父类中,重写方法后,以创建对象的类型为准,会调用谁的方法。

    二、关于方法重写的特性

    1、发生在子父类中,方法重写的两个方法返回值、方法名、参数列表必须完全一致(子类重写父类的方法)
    2、子类抛出的异常不能超过父类相应方法抛出的异常(子类异常不能大于父类的异常)
    3、子类方法的访问级别不能低于父类相应方法的访问级别(子类访问级别不能低于父类访问级别)
    4、父类中的方法若使用 private、static、final任意修饰符修饰,那么不能被子类重写。

    三、为什么要你重写方法?或者方法重写的目的是什么?

    若子类从父类中继承过程的方法,不能满足子类特有的需求时,子类就需要重写父类中相应的方法,方法的重写也是程序扩展的体现。

    class Dog{
        protected String name;
        private String sex;
        public void eat(){
            System.out.println("吃饭");
        }
    }
    
    class HomeDog extends Dog{
        // 方法的重写
        public void eat() {
            System.out.println("我是家狗,我喜欢吃骨头");
        }
    
        public void print(){
            System.out.println(name + "我是一只家狗, wangwang");
        }
    }
    
    class HuskyDog extends Dog{
        // 方法的重写
        public void eat(){
            System.out.println("我是Husky,我喜欢吃鸡肝");
        }
        public void show(){
            System.out.println(name+ "我是husky,我能跳舞");
        }
    }
    

    面试题 :overloading 与 overriding的区别?

    overloading:方法的重载, 发生在同一个类中,方法名相同,参数列表不同,返回值无关。
    overriding:方法的重写,发生在子父类中,方法名相同,参数列表相同,返回值相同。子类的访问修饰符要大于或者等于父类的访问修饰符。子类的异常声明必须小于或等于父类的异常声明。如果方法被private、static、final修饰,不能被重写。

    四、super关键字

    1、使用super调用父类中的属性,可以从父类实例获取信息。
    2、使用super调用父类中的方法,可以委托父类对象帮忙完成某件事情。
    3、使用super调用父类中的构造方法(super(实参)形式),必须在子类构造方法的第一条语句,调用父类中相应的构造方法, 若不显示的写出来,默认调用父类无参构造方法,比如:super();

    this表示当前对象
    使用super来调用父类的属性,方法、和构造方法

    相关文章

      网友评论

          本文标题:方法的重写(覆盖)与Super关键字

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