继承中的隐藏和覆盖

来源:互联网 发布:mysql主键自增长删除后 编辑:程序博客网 时间:2024/05/16 19:31

继承中的隐藏和覆盖

        1. 如果子类对父类的一个同名的属性重新定义(就是重新赋值,被显示写在了子类的java文件中),此时从父类继承的属性将被隐藏,除非使用super关键字显式的调用。

        2. 子类对父类的属性重新定义,可以重新定义值,也可以重新定义类型。

        3. 如果父类的父类声明了一个protected的属性,在父类中被重新定义为private的,那么在子类中访问这个属性时,将指向父类的那个属性,父类的父类的那个属性是无法访问到的,有因为父类的这个属性被定义为private的,所以子类是无法访问到这个属性的。

        4. 这里的隐藏指的是子类拥有两个同名的属性,一个是自己的,一个是父类的。在不添加super关键字时,当执行继承自父类的方法时,使用的是来自父类的属性,当执行自己的方法时,使用的是自己的属性。总结一句话就是,方法是谁的,就用谁的。

        5. 如果在自己方法中使用super.method()来显式调用父类的方法,那么这个父类方法中执行用到的属性依然来自父类。这个地方尤其注意。

        6. 对于被重新定义的static属性,在对其操作时不会对继承自父类的static属性产生影响,但是如果没有重新定义static属性,那么对其操作将会影响父类的static属性的值。

        7. 覆盖是相对于继承中的方法的,覆盖的主要目的是:1. 使用相同参数表,实现的却是不同的功能。2. 在名字相同的方法中,子类做的要更多。3. 取消继承自父类的该方法,使用空语句块。

        8. 对于继承过程中的构造函数:首先,父类的构造函数是不能继承的,其次如果要在构造函数中使用父类的构造函数,那么父类的构造函数必须放在首行,最后,如果不在构造函数中显式调用父类的构造函数,系统将默认在首行执行父类无参三构造函数。

        9. 最重要的,子类不仅能继承来自父类的方法和属性,也能继承来自父类的父类的属性和方法(实际上,父类继承了来自父类的父类的属性和方法,在父类被子类继承时,这些来自父类的属性和方法原原本本得传给了子类)。

0 0
原创粉丝点击