A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 可见 中级黑马   /  2012-3-10 22:30  /  1483 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

两个类
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的  如果不是就直接返回了啊 ,那就证明他是,既然是为什么还要强转?

评分

参与人数 1技术分 +1 收起 理由
房宝彬 + 1

查看全部评分

1 个回复

倒序浏览
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() {

        }
}

评分

参与人数 1技术分 +1 收起 理由
房宝彬 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马