7.2. 成员变量隐藏和方法覆盖

7.2.1. 成员变量隐藏

子类成员变量与父类成员变量设置一致,会覆盖父类的成员变量,称为“成员变量隐藏”

ParentClass.java

package a51work6;

public class ParentClass {
//  成员变量
    int x =10;

}

class SubClass extends ParentClass{
//  子类继承父类
//  覆盖父类的成员变量x
    int x =20;
    public void print() {
//      访问子类对象x成员变量
        System.out.println("x = " + x);
//      访问父类对象x成员变量
        System.out.println("super.x = " + super.x);

    }

}

调用代码 helloword4.java

package a51work6;

public class helloword4 {
    public static void main(String[] args) {
//      实例化子类SubClass
        SubClass pObj = new SubClass();
//      调用子类的print方法
        pObj.print();
    }

}

7.2.2. 方法覆盖

ParentClass.java 类,有一个setvalue()方法.方法中x的值为10

package a51work6;

public class ParentClass {
//  成员变量
    int x;

    protected void setvalue() {
        x = 10;
    }

}

class SubClass extends ParentClass{
//  子类继承父类
//  屏蔽父类x成员变量
    int x;

    @Override
    public void setvalue() {
//      访问子类对象x成员变量
        x = 30;

//      调用父类的setvalue()方法
        super.setvalue();
    }

    public void print() {
//      访问子类对象x成员变量
        System.out.println("x = " + x);
//      访问父类对象x成员变量
        System.out.println("super.x = " + super.x);

    }

}

调用代码 helloword4.java 先调用setvalue()方法,然后调用子类的print()方法

package a51work6;

public class helloword4 {
    public static void main(String[] args) {
//      实例化子类SubClass
        SubClass pObj = new SubClass();
//      调用setvalue()方法
        pObj.setvalue();
//      调用子类的print方法
        pObj.print();
    }

}

输出结果

x = 30
super.x = 10