如果父和子两者中定义了相同的私有实例变量,那么行为将如何?

时间:2015-01-03 09:02:23

标签: java

案例1:在下面的代码中,如果child只继承(不覆盖)getPrivateString,则使用child对象的引用调用getPrivateString将返回Parent变量的值。 Output =“变量:父类中的私有访问说明符”。

案例2:在下面的代码中,如果child覆盖getPrivateString(defined与parent相同),则使用child对象的引用调用getPrivateString将返回Child变量的值。 Output =“变量:子类中的私有访问说明符”。 任何人都可以对此有所了解,因为在继承方面,方法实际上只是在儿童定义的代码中。我想了解变量选择过程。

Parent.java

package learnInheritance.parent;

public class Parent 
{

    private String privateString = "Variable: private access specifier in Parent Class";

    public String getPrivateString()
    {
        return this.privateString;
    }
    @Override
    public String toString()    
    {
        return this.getClass().getName();
    }

}

Child.java

package learnInheritance.child;

import learnInheritance.parent.Parent;

public class Child extends Parent
{

    private String privateString = "Variable: private access specifier in Child Class";

    /*
    @Override
    public String getPrivateString()
    {
        return this.privateString;
    }
    */
    @Override
    public String toString()    
    {
        return this.getClass().getName();
    }


    public static void main(String [] str)
    {
        Parent parent=new Parent(); 
        Child child=new Child();

        System.out.println("parent.getPrivateString() = " + parent.getPrivateString());
        System.out.println("child.getPrivateString() = " + child.getPrivateString());


    }

2 个答案:

答案 0 :(得分:2)

private个字段(根据定义)不会被继承。你的第二个案例"被称为variable shadowing并且发生在(来自维基百科文章)在某个范围内声明的变量(决策块,方法或内部类)与在外部范围内声明的变量具有相同的名称。 / em>的

答案 1 :(得分:0)

在第一个示例中,Child不会覆盖该方法,因此调用Parent方法,并引用其自己的变量。 在第二个示例中,调用Child方法,它引用Child中的变量。

子类无法访问其父类的私有成员。父类无法访问其子类中的任何变量。换句话说,没有“变量覆盖”这样的东西 - 覆盖仅适用于方法。