黑马程序员技术交流社区

标题: java中类对象的问题...... [打印本页]

作者: 可见    时间: 2012-3-10 22:30
标题: java中类对象的问题......
两个类
1  :  
public class Citizen{
        String id;
        String name;
        int age;
        public Citizen(String id,String name,int age){
                this.id = id;
                this.name = name;
                this.age = age;
        }
        public Citizen(){}

        public boolean equals(Object o){
                if(o==null)
                        return false;
                if(o.getClass()!=this.getClass())
                        return false;
                if(this==o)
                        return true;

                Citizen c = (Citizen)o;
                return (this.id.equals(c.id));
        }
        public  void test(){

        }
}

2  
      public class TestC{
        public static void main(String[] args){
                Citizen c1 = new Citizen("a111111","zhangsan",30);
                Citizen c2 = new Citizen("a111111","zhangsan",30);
                System.out.println(c1.equals(c2));
        }
}
   
通过testc调用citizen    citizen里的equals为覆盖方法    ,我想问为什么equals里面还要把o转换成citizen类型的    c2不是在testc里面创建成citizen类的对象了么。。然后传过去还是citizen的啊     难道是因为形参是object类的?  但是equals里面也有判断啊,判断o传过来是不是citizen的  如果不是就直接返回了啊 ,那就证明他是,既然是为什么还要强转?
作者: 冯旭君    时间: 2012-3-10 22:54
c2是Citizen的是没有问题的。因此会有 o.getClass() == this.getClass(),所以不会直接返回的。你最后又用id判断是否相等,如果id相等那么就判断为相等。


说一下你的代码,有点不符合面向对象的思想。你最好把成员变量最好设计为私有变量然后实现get和set方法。所以在equals方法里面必须要强制转换,不然就不能调用get方法。

代码如下:试试看


public class Citizen {
        private String id;
        private String name;
        private int age;

        public String getId() {
                return id;
        }

        public void setId(String id) {
                this.id = id;
        }

        public String getName() {
                return name;
        }

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

        public int getAge() {
                return age;
        }

        public void setAge(int age) {
                this.age = age;
        }

        public Citizen(String id, String name, int age) {
                this.id = id;
                this.name = name;
                this.age = age;
        }

        public Citizen() {
        }

        public boolean equals(Object o) {

                if (o == null)
                        return false;
                if (o.getClass() != this.getClass())
                        return false;
                if (this == o)
                        return true;

                Citizen c = (Citizen) o;
                return (this.id.equals(c.getId()));
        }

        public void test() {

        }
}





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2