当前位置: 代码迷 >> J2SE >> java中private的一个有关问题
  详细解决方案

java中private的一个有关问题

热度:43   发布时间:2016-04-23 19:35:31.0
java中private的一个问题

import java.util.HashSet;
import java.util.Collection;

public class Demo{
public static void main(String[] args){
Collection c = new HashSet();

c.add(new Person("well"));
c.remove(new Person("well"));

System.out.println(c);
}
}

class Person{
private String name;

public void setName(String name){
this.name = name;
}

public String getName(){
return name;
}

public Person(String name){
this.name = name;
}

public String toString(){
return name;
}

public boolean equals(Object obj){
if (obj instanceof Person){
Person person = (Person)obj;
return (name.equals(person.name));//!!!!为什么不报错?name是private修饰的,怎么可以直接调用?
}

return super.equals(obj);
}

public int hashCode(){
return name.hashCode();

}



问题:  return (name.equals(person.name));这句话为什么不报错呢?
------解决思路----------------------
为什么要报错。在同一个类里使用
------解决思路----------------------
引用:
Quote: 引用:

你的意思是为什么可以直接使用person.name
private是类属性不是对象属性,
所以实际上name对同一类下的所有对象是可见的

对,我就想问为什么可以直接使用person.name
也就是说只要Person对象写在Person类就行,是吧?
但是 public boolean equals(Object obj),obj是从外面的类里传进来的,,,然后觉得就不能调用private修饰的变量。。



调用的对象和传入的对象是同一类就行
比如student有个equals 传入的是student就可以,传入其他类对象就不行
  相关解决方案