了解私有方法的范围

时间:2015-09-17 17:10:06

标签: java

我的一个朋友向我提出这个问题。为什么以下代码在调用aa.x()时没有出错?
我理解aa是对B类对象的引用,但是在类A的方法中调用类A的私有方法,它是可见的,因此可以访问。

我的理解是否正确?或者这背后还有其他原因吗?

public class A {
    public void xyz() {
        System.out.println("A");
    }
    private void x() {
        System.out.println("A:x");
    }
    public static void main(String[] args) {
        B b = new B();
        A aa = b;
        aa.x();
        aa.xyz();
        B bb = (B) aa;
        bb.xyz();
        bb.xyz12();
    }
}
class B extends A {
    public void xyz() {
        System.out.println("B");
    }
    public void xyz12() {
        System.out.println("B-12");
    }
}

3 个答案:

答案 0 :(得分:3)

我无法立即使用子类找到副本,但从根本上说它与this question的答案相同。

管理x的访问权限有两件事:

  1. 代码是进行访问的地方。由于xA的私有,因此访问它的代码必须是A中方法的一部分。它不能在子类(B)或不相关的类中。

  2. 您正在使用哪种参考。如果您有A引用,则可以访问x。如果您有B引用,则即使您的代码是A方法的一部分,也不能 。您可以将其转换为A,然后访问x,但您无法直接使用B类型的引用。

答案 1 :(得分:0)

它只是可见的,因为调用它的main方法包含在A类中。将它移到B类并且它不起作用

答案 2 :(得分:0)

由于私有方法未被继承,超类引用会调用自己的私有方法。

您的main方法是A的方法,因此可以调用x()私有方法。

  

私人修饰符 - 该字段只能在自己的类中访问。