说关键字"private"在班级级别是私有的是什么意思?



我正在阅读的一个消息来源说,关键字private意味着方法或变量在类级别而不是对象级别是私有的。

在这样的代码块中的含义:

public class Weight2 implements Comparable<Weight2>
{
private int myPounds, myOunces;
public Weight2()
{
myPounds = myOunces = 0;
}
public Weight2(int x, int y)
{
myPounds = x;
myOunces = y; 
}
public int compareTo(Weight2 w)
{
if(myPounds<w.myPounds)
return -1;
if(myPounds>w.myPounds)
return 1;
if(myOunces<w.myOunces)
return -1;
if(myOunces>w.myOunces)
return 1;
return 0;
}
}

Weight2 对象可以在没有访问器方法的情况下访问不同 weight2 对象的私有字段...而是只是说w.myPounds.

澄清:

我想知道对象可以从哪里访问不同对象的私有数据。它只来自班级内部吗?或者这可以通过驱动程序完成?

我正在阅读的消息来源说关键字private表示方法或 变量在类级别是私有的,而不是对象级别的。

我不知道你的消息来源。这没有错,但也不清楚。

您可以参考 JLS,它带来了有关私有修饰符的此信息:

第6章.名字

6.6.1. 确定可访问性

。成员或构造函数声明为私有,访问是 允许当且仅当它发生在顶级的主体内时 包含会员声明的类 (§7.6( 或 构造 函数。

大约:

所以我想问的是,相同类型的对象可以访问每个 没有访问器方法的其他私有字段?

事实上。

并且它与规范相当一致。
它不会将private成员的访问权限限制为仅当前实例。
因此,您可能会认为此限制不存在,因此您可以为当前实例调用private方法或引用当前类的任何变量。
当然,在静态和实例上下文中都是如此。


作为旁注,您还应该考虑级别访问:类和实例。
private static修饰符表示方法或变量在类级别是私有的。因此,您不需要任何实例来引用它。
private修饰符(不带static修饰符(意味着方法或变量在实例级别是私有的。 因此,您需要一个实例来引用它。


所以我想问的是,相同类型的对象可以访问每个 没有访问器方法的其他私有字段?

是的,他们可以。

Java 中的访问修饰符是关于类的,而不是关于实例的。 https://docs.oracle.com/javase/tutorial/java/javaOO/accesscontrol.html

不完全确定你的问题到底是什么。但是,我会给你一个我认为你想要的基本总结。

如果变量或方法是私有的,则只能在它所在的类中访问或使用它。

如果变量或方法是公共的,则可以由其他类访问。

看看这个网站,它可能会帮助你,它肯定帮助了我。

https://docs.oracle.com/javase/tutorial/java/javaOO/accesscontrol.html

最新更新