java 成员变量隐藏问题

来源:百度知道 编辑:UC知道 时间:2024/05/31 22:04:59
class one {
String ss = "cccc";
void getSs(){
System.out.print(ss);
}
}

public class Two extends one{
String ss = null;
public Two() {
this.ss = "dddd";
}
public static void main(String[] args){
Two a = new Two();
a.getSs();
}
}

为什么注释掉String ss = null; 这句话就输出的是dddd? 为什么a里面有两个ss?(用Eclipse单步调试时看到得)

为什么注释掉String ss = null; 这句话就输出的是dddd?
-------------------------
注释掉String ss = null;说明ss是one的。
执行了this.ss = "dddd"; 其实是修改了one中ss的值。所以输出dddd
而没有注释掉的时候,this.ss = "dddd";修改的是Two自己本身的成员。
所以输出是cccc
======================================
为什么a里面有两个ss?
-------------------------
Two继承了one ,两个ss其中一个是one的另一个是Two的。

a 是Two的对象 于是含有父类One的成员和Two类的成员
class one {
String ss = "cccc";
void getSs(){
System.out.println(ss);
}
}

class Two extends one{
String ss = null;

public Two() {
this.ss = "dddd";
}

void getSs(){ //覆写父类的getSs
System.out.println(ss);
}

public void getFatherSs(){
super.getSs(); //获得父亲类的ss
}
public static void main(String[] args){
Two a = new Two();
a.getSs(); //获得本类ss
a.getFatherSs(); //调用获得父亲ss
}
}

因为如果注释掉这句话class Two会调用父类class one 的构造方