开发者社区> 问答> 正文

java private方法的疑惑

简单演示代码如下:

public class ClassA {

    public ClassA() {
        System.out.println("constructor.");
    }

    public static ClassA newInstance(){
        ClassA a = new ClassA();
        a.print();
        return a;
    }
    
    private void print(){
        System.out.println("ClassA has been instantiated.");
    }
}

上面代码通过newInstance()可以正常实例化。
疑问就是为什么a.print();能够通过编译?
print()照理来说应该是private属性的,为什么能够访问到?

展开
收起
蛮大人123 2016-03-11 15:01:52 2081 0
2 条回答
写回答
取消 提交回答
  • 只可以被本对象自己调用
    2019-07-17 18:59:20
    赞同 展开评论 打赏
  • 我说我不帅他们就打我,还说我虚伪

    这个访问是没问题的,符合java规范,被private关键字修饰的成员(成员变量、方法、类等)和构造方法只在包含其声明的顶级类(top level class)中可以访问。
    ClassA 就是包含 print 方法声明的顶级类,所以可以调用。如果newInstance方法是在其他类中,那么代码在编译时就会报错。
    另外如果你把ClassA的构造方法声明为private也是可以正常运行的。

    2019-07-17 18:59:20
    赞同 展开评论 打赏
问答分类:
问答地址:
问答排行榜
最热
最新

相关电子书

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