案例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());
}
答案 0 :(得分:2)
private
个字段(根据定义)不会被继承。你的第二个案例"被称为variable shadowing并且发生在(来自维基百科文章)在某个范围内声明的变量(决策块,方法或内部类)与在外部范围内声明的变量具有相同的名称。 / em>的
答案 1 :(得分:0)
在第一个示例中,Child
不会覆盖该方法,因此调用Parent
方法,并引用其自己的变量。
在第二个示例中,调用Child
方法,它引用Child
中的变量。
子类无法访问其父类的私有成员。父类无法访问其子类中的任何变量。换句话说,没有“变量覆盖”这样的东西 - 覆盖仅适用于方法。