访问修饰符更改后对象属性发生变化

问题描述 投票:0回答:1

在我的

Student
类中,变量首先设置为:

public String name;

我在另一个名为

StudentUse
类的类中访问它,如下所示:

Student s1 = new Student();
s1.name= "sarang";
System.out.println(s1.name);

它印有“sarang”。
之后我将变量的访问修饰符更改为:

private String name;

并尝试使用 getter 方法打印相同的对象变量“名称”。

System.out.println(s1.getName());

为什么它打印 null 而不是“sarang”,即使它在更改访问修饰符之前设置为值“sarang”?

如果我们改变了java中变量的访问修饰符,是不是该对象之前的信息就丢失了?

java access-modifiers
1个回答
0
投票

这一切都归结为您的

getName
方法,根据您的描述,该方法可能如下所示:

public String getName() {
    return null;
}

而它需要看起来像这样:

public String getName() {
    return this.name;
}

当您将

name
的修饰符从
public
更改为
private
时,您有效地阻止了对该数据成员的直接访问,并且您做得很好。

getName
仍然是
public
,因此您可以通过
name
访问
getName
,因此您有一个
public
getter,可用于读取数据成员的值,即使数据成员是
private
并且只能在
class
内部引用和更改。通过将某些内容从
public
更改为
private
,您不会丢失它。您只需使从外部对其的直接访问无效,这是一件好事,因为当该成员被读取或写入时,您可能还想做其他事情,例如记录操作或类似的操作,并且如果您有 getter 和 setter ,那么您已经对您想要嵌入到这些操作中的任何未来事物有了清晰的支持。

© www.soinside.com 2019 - 2024. All rights reserved.