问题描述
|
我想知道类定义中变量之前的私有访问修饰符是否使创建的对象无法访问它?
简单地说,使用该类创建新对象时,是否将私有属性变量的值加载到堆内存中?
例如:假设我创建了一个类(让它称为CLASS1),该类具有一个名为private int p1 = 10的属性变量;我将方法设为“ 0”
现在,如果我创建一个对象
CLASS1 object1=new CLASS1
在main方法中,然后尝试打印p1的值,我收到一条错误消息,指出它不可访问,因为它是一个非静态变量。因此无法访问!
请看下面的例子:
public class DateThree {
private int day;
private int month;
private int year;
public void setDay(int d) {
day = d;
}
public int getDay() {
return day;
}
public void setMonth(int m) {
month = m;
}
public int getMonth() {
return month;
}
public void setYear(int y) {
year = y;
}
public int getYear() {
return year;
}
public int calcDaysInMonth() {
switch(month) {
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:
return 31;
case 2:
return 28;
case 4:
case 6:
case 9:
case 11:
return 30;
default:
System.out.println(\"Invalid month.\");
return 0;
}
}
如果我从另一个班级上课
public class DateThreeTest {
public static void main(String args[]) {
DateThree d = new DateThree();
int days = d.calcDaysInMonth();
System.out.println(\"Days in Month:\" + days);
}
}
但是从理论上讲,这应该行不通,因为month是私有的,因此新对象无法访问它,因此d.CalcDaysInMonth应该给出错误,因为它需要使用私有方法month,而新文件中没有该月份而且新方法都无法访问它,但是它不会给出错误,它可以工作!
所以我的问题是:DateThreeTest中的对象(即d
)从哪里获得month变量的值?
解决方法
你错过了什么。 :)
在面向对象编程中,数据成员
表示对象的属性(意图/概念/建模兴趣)
这是对象的所有方法中都可以使用的变量(这更多是一种编程方式,可以在方法之间共享变量)
数据成员,无论其具有什么可视性修改器,都在对象的范围内,只要对象存活,它们就一直存在。可以从该类的所有方法中访问“ 5”个数据成员,但不能从其他任何地方访问。
一旦在Java中实例化一个对象,他的字段就会被初始化,实际上,实例化仅此而已。
在您的示例中,当您调用
d.calcDaysInMonth()
时,它将使用d \的数据成员,变量month引用您在DateThree类的开头声明的属性:
private int month;
这更有意义吗?
请注意,以上所有内容均不适用于静态字段,但不适用于非静态字段(如果需要,可以正常使用)。
祝您好运,但是请详细了解它。
问候,
斯特凡