JAVA 多态-成员变量

说明1

父类有某个属性,子类没有该属性,父子类的成员方法都可以访问该属性

class Wangjianlin{
    double money=1000;
    public void showMoney(){
        return money;
    }
}

class Wangsicong extends Wangjianlin{
    public void showMoney(){
        return money;
    }
}

测试:

Wangjianlin wang=new Wangsicong();
System.out.println(wang.showMoney());

执行结果:

1000

说明2

子类有某个属性,父类没有该属性,通过父类引用 不能访问 该子类的属性,即:不能向下查找

理解: 父母不知道我们的小金库

父类 对象名 = new 子类();

对象名.变量;

例子:

class Wangjianlin{
    double money=1000;
}

class Wangsicong extends Wangjianlin{
    int gfNum=5;
}

测试:

Wangjianlin wang=new Wangsicong();
System.out.println(wang.money);//访问父类的成员变量
//由于Wangjianlin没有 gfNum 成员变量,所以编译报错
//System.out.println(wang.gfNum);

执行结果:

1000

说明3

父子类有 同名属性,通过父类的引用,访问的是父类的属性

例子:

class Wangjianlin{
    double money=1000;
}

class Wangsicong extends Wangjianlin{
    double money=500;
}

测试:

Wangjianlin wang=new Wangsicong();
System.out.println(wang.money;

执行结果:

1000

说明4

父子类有 同名属性,通过 父类的成员方法 访问 属性,访问的是 父类的属性

例子:

class Wangjianlin{
    double money=1000;
    public void showMoney(){
        return money;
    }
}

class Wangsicong extends Wangjianlin{
    double money=500;
}

测试:

Wangjianlin wang=new Wangsicong();
System.out.println(wang.showMoney());

执行结果:

1000

说明4-1

子类 重写 父类的成员方法,那么 优先 访问 子类的属性

例子:

class Wangjianlin{
    double money=1000;
    public void showMoney(){
        return money;
    }
}

class Wangsicong extends Wangjianlin{
    double money=500;
    public void showMoney(){
        return money;
    }
}

测试:

Wangjianlin wang=new Wangsicong();
System.out.println(wang.showMoney());

执行结果:

500