Java学习——方法重写

方法重写(覆写、覆盖)【研究抽象类和接口的第一步】


一、方法的重写

发生在有继承关系的类中,如果子类定义了与父类完全相同的方法(返回值 参数列表 方法名全相同),这样的操作叫重写(Override)。

class Person{
    public void print(){
        System.out.println("Person类的输出");
    }
}
class Student extends Person{
    public void print(){
        System.out.println("Student类的输出");
    }
}
public class Test{
    public static void main(String[] args) {
        new Person().print();
        new Student().print();
    }
}
/**输出
Person类的输出
Student类的输出
*/

方法重写的作用在于增强了类的重用性、拓展性,因为子类不仅继承了父类的东西,也能加入自己的东西,我们只要在主类中写print()函数,无需知道具体使用了哪个类,就可以得的这一个类具体的信息。

判断当前方法调用的是哪个类的方法:
a.当前使用的对象是通过哪个类new的
b.调用的方法是否被子类所重写,如果被重写,则调用的一定是子类所覆写后的方法

方法重写时的注意事项:

1.被重写的方法不能拥有比父类更为严格的访问控制权限

意味着如果父类使用public进行方法声明,那么子类必须也使用public;如果父类使用default,那么子类可以使用default或者public。

访问控制权限
private (私有)<default(啥也不写)包访问权限  < public(公有访问权限)

2.方法覆写不能出现private关键字 ,隐式继承的方法无法被重写

如果现在父类方法使用private定义,子类中使用public重写,其实并不算重写。父类方法使用了private定义,那么就表示该方法只能被父类使用,子类无法使用。换言之,子类根本就不知道父类有这样的方法。子类写了与父类完全相同的方法只能算是一个新方法,和父类没有关系。

二、属性的重写

当子类定义了和父类属性名称完全相同的属性的时候,就成为属性的重写。实际没什么意义,因为类中的属性都要求使用private封装,一旦封装了,子类不知道父类具有什么属性,那么也就不存在属性重写的问题了。

猜你喜欢

转载自blog.csdn.net/eve8888888/article/details/83185302
今日推荐