开发者社区> 问答> 正文

java中更改子类同名成员变量,为什么父类成员变量也会改变:报错

public class B extends A {

    public B(String password) {
        super(password);
        this.password = "22";
        System.out.println("子类成员变量:"+this.password);
        System.out.println("父类成员变量:"+super.password);
    }
    
    public static void main(String[] args) {
        @SuppressWarnings("unused")
        B b = new B("11");
    }
}
class A{
    protected String password;
    public A(String password) {
        this.password = password;
    }
}

 

 

输出:

子类成员变量:22
父类成员变量:22

 

 

 

 

 

展开
收起
kun坤 2020-06-06 13:55:30 572 0
1 条回答
写回答
取消 提交回答
  • 注意和楼上那个比较######同名变量 会有两个,隐藏只会有一个######

    哈哈,建议你放弃JAVA吧

    ######知道了这个是同一个变量,不是同名, 为什么劝我要放弃?######

    你这子类 的成员变量不是继承来的吗,又不是子类特有的 

    ######嗯嗯知道了,谢谢 之前被子类继承父类后拥有子+父误导了,以为产生了新变量######

    请看同名的情况。为 子类 B 添加一个和父类 A 同名的成员变量 password, 结果就不同了吧?

    子类成员变量:22
    父类成员变量:11

    public class B extends A {
    	//此处,为子类添加一个和父类同名的成员变量
    	private String password; 
    
        public B(String password) {
        //调用父类的构造方法,将创建子类的参数值,传给父类的成员变量    
            super(password); /
        // 以字符串"22" 赋值给子类的成员变量     
            this.password = "22";
        //结果,子类成员变量的值,一定是 "22"
            System.out.println("子类成员变量:"+this.password);
        //父类的成员变量,是创建子类时所接受的参数值,由17行得知,应当是"11"
            System.out.println("父类成员变量:"+super.password);
        }
        
        public static void main(String[] args) {
            @SuppressWarnings("unused")
            B b = new B("11");//用参数值"11"创建子类
        }
    }
    class A{
        protected String password;
        public A(String password) {
            this.password = password;
        }
    }

     

    ######是的
    2020-06-06 13:55:35
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
Spring Cloud Alibaba - 重新定义 Java Cloud-Native 立即下载
The Reactive Cloud Native Arch 立即下载
JAVA开发手册1.5.0 立即下载