所以在构造函数Student(Student s)
中为什么我可以使用s.name
?通常当我们使用具有私有实例变量的对象时,我们需要键入s.getName()
,假设有一个方法来访问信息。为什么在这种情况下我们可以使用s.name
,s.score1
等
我认为这是因为它属于自己的班级,但我无法解决原因。
/**
* Manage a student's name and three test scores.
*/
public class Student {
//Each student object has a name and three test scores
private String name; //Student name
private int test1; //Score on test 1
private int test2; //Score on test 2
private int test3; //Score on test 3
/**
* Default Constructor
* Initializes name, test1, test2, and test3 to the default values
*/
public Student() {
this("", 0,0,0);
}
/**
* Constructs a Student object with the user supplying the name
* test1, test2, and test3
*/
public Student(String nm, int t1, int t2, int t3) {
name = nm;
test1 = t1;
test2 = t2;
test3 = t3;
}
/**
* Constructs a Student object with the user supplying
* a Student object as the parameter
*/
public Student(Student s){
this(s.name = "bill",s.test1,s.test2,s.test3);
}
答案 0 :(得分:2)
构造函数是类的成员,因此可以访问私有成员,甚至是类的其他实例。它们是类的私有,而不是对象。也可以从方法和属性访问器直接访问私有成员。
答案 1 :(得分:2)
Java中的关键字private
表示如果您在班级内工作,则只能访问该成员。请检查以下示例:
public class Person {
private String name;
...
public equals(Person other) {
// You're inside the person class here, therefore you can access
// Every member of any Person object (no matter if the object is "this" or any other)
return this.name.equals(other.name)
}
}
我认为最好理解这一点,就是要明确自己,使用任何类成员与在对象this
上使用它是一样的。例如。如果你写:
person = "Peter Grand";
与
相同this.person = "Peter Grand";
答案 2 :(得分:2)
因为public
,private
和其他访问修饰符是在class
级别指定的,而不是在实例(对象)级别。因此,在一个类中,您可以访问该类的所有实例的所有private
成员;在继承的类中,您可以访问该类的所有受保护成员,等等。
这是有道理的,因为setter肯定需要访问私有成员:如何设置实例的字段?对于构造函数,它是一样的。
此外请注意,构造函数有时是唯一可以设置字段的成员:如果字段标记为final
。
答案 3 :(得分:1)
private
表示您可以在自己的类中访问它,但不能从类外部访问它。因为您从name
类构造函数中访问Student
它可以正常工作。
答案 4 :(得分:1)
成员name
被声明为private
,这意味着可以在您自己的类的范围内访问该变量(,因此在所有嵌套范围中)。