Java 为什么我可以访问b的值,即使它在子类中设置为private?

Java 为什么我可以访问b的值,即使它在子类中设置为private?,java,Java,输出为20。引用类型为b的对象的b如何才能正确访问私有成员 您仍然可以从B类中直接访问它,即使它是私有的。由于main方法位于那里,因此可以访问私有变量 A类中的变量b被b类中的变量b隐藏,除非您这样声明,否则无法访问该变量: public class A { protected int b = 16; } public class B extends A{ private int b=20; public static void main(String[] arg

输出为20。引用类型为b的对象的b如何才能正确访问私有成员

您仍然可以从
B
类中直接访问它,即使它是
私有的
。由于
main
方法位于那里,因此可以访问私有变量

A
类中的变量
b
b
类中的变量
b
隐藏,除非您这样声明,否则无法访问该变量:

public class A {

protected int b = 16;

}


public class B extends A{

    private int b=20;


    public static void main(String[] args)
    {
        B b = new B();
        System.out.println(b.b);
    }

}

这将打印
16

您仍然可以从
B
类中直接访问它,即使它是
私有的
。由于
main
方法位于那里,因此可以访问私有变量

A
类中的变量
b
b
类中的变量
b
隐藏,除非您这样声明,否则无法访问该变量:

public class A {

protected int b = 16;

}


public class B extends A{

    private int b=20;


    public static void main(String[] args)
    {
        B b = new B();
        System.out.println(b.b);
    }

}

这将打印
16

静态
类中的方法可以访问包含类的所有
私有
成员


由于您的
main
是类
B
的一部分,因此它可以查看所有成员。

类中的静态方法可以访问包含类的所有
私有成员


由于您的
main
是类
B
的一部分,因此它可以查看所有成员。

您在类B中获得B的值。B可以访问自己的私有成员。

您在类B中获得B的值。B可以访问自己的私有成员。

您在当前以上类别
B
。B有权访问所有it成员的BARIABLE,无论它们是如何声明的

由于
A.b
受保护但可供调用类使用,因此可以通过向上转换来访问:

A ab = new B();
System.out.println(ab.b);

您正在访问上面当前类
b
中的类成员变量
b
。B有权访问所有it成员的BARIABLE,无论它们是如何声明的

由于
A.b
受保护但可供调用类使用,因此可以通过向上转换来访问:

A ab = new B();
System.out.println(ab.b);

因为
main()
B
类的成员,所以它可以访问
private
成员。

因为
main()
B
类的成员,所以它可以访问
private
成员。

这是一个很好的例子,说明了为什么应该使用getter(和setter)访问成员。@Paranaix为什么?相反,getter和setter并不能阻止这一点。从概念上讲,一个名为“b”的属性不应该在同一类层次结构中声明两次。如果在名为Entity的类和名为Person的实体子类中声明名为“name”的属性,这是一个很好的例子,说明了为什么应该使用getter(和setter)访问成员。@Paranaix怎么会这样?相反,getter和setter并不能阻止这一点。从概念上讲,一个名为“b”的属性不应该在同一类层次结构中声明两次。如果在名为Entity的类和名为Person的实体子类中声明名为“name”的属性,则情况也是如此。