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

一、方法重写(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关键字)