在此代码中:
public class Main{
private void method()
{
System.out.println("inside method");
}
public static void main(String[] args) {
Main obj = new Main();
obj.method();
}
}
为什么我们在课堂上时可以使用类中的对象访问私有方法,而我们不能在课外进行访问? (我的意思是什么是合乎逻辑的原因?)
另一种情况是:main
方法是静态的,那么为什么没有编译器错误抱怨“从静态方法访问非静态方法”??
答案 0 :(得分:6)
因为它是私人的。类本身可以使用其私有属性和行为。外部课程不能使用的原因是阻止外部课程干涉私人事务。简单不是吗?
这里实际上是使用实例上下文调用方法。尝试在没有obj
的情况下调用它肯定会抱怨。顺便说一句,谁说你不能从静态方法访问非静态方法。实际上,您无法在静态上下文中调用非静态方法。
答案 1 :(得分:3)
你的困惑来自于对private
的含义的误解。 private
关键字表示只能从包含的上下文中的声明类`,不的上下文中访问该成员实例。您可以自己调用私有方法(最常见的)或相同或派生类型的其他实例(如您所示)。
在静态方法中调用实例方法没有问题,但是你必须有一个实例来调用它们(你有obj
)。
答案 2 :(得分:2)
回答你的第二个问题: - 你是通过该类的对象调用该方法,但如果你直接调用该方法,它将给你一个错误,用于从静态方法访问非静态方法。
第一个: - 你从类中调用方法,类可以使用它的私有成员