免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1571 | 回复: 4
打印 上一主题 下一主题

一个JAVA的多态问题,请高手解决 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-12-15 13:30 |只看该作者 |倒序浏览
本帖最后由 navydg 于 2011-12-16 10:26 编辑
  1. //Person.java

  2. public class Person
  3. {
  4.         //年龄
  5.         private int age;
  6.         //身高
  7.         private double height;
  8.         private String name;
  9.        
  10.         public Person(String name){
  11.                if (name==null||name==""){
  12.                         System.out.println("人都有名字,初始化时请指定人名");
  13.                         this.name=null;
  14.                 }else this.name=name;
  15.         }
  16.         public String getName() {
  17.                 return name;
  18.         }
  19.         public void setName(String name) {
  20.                 this.name = name;
  21.         }
  22.         //重写toString方法
  23.         public String toString()
  24.         {
  25.                 return("Name:"+name+",Age:" + age + ",Height:" + height);
  26.         }
  27. //重写equals方法
  28.         public boolean equals(Person person){
  29.                 if(person!=null&&person.getName()!=null&&this.name==person.getName()){
  30.                        
  31.                         return true;
  32.                 }
  33.                 return false;
  34.         }
  35.          public static void main(String[]  args){
  36.                  Person[] persons=new Person[5];
  37.                  persons[0]=new Person("One");
  38.                 persons[1]=new Person("Two");
  39.                 persons[2]=new Person("Three");
  40. //按我的想法,这里应该返回1,但是结果是返回-1,发现在调用equals方法时,总是调用
  41. //Object对象的equals方法,为什么不调用Person类的equals方法呢?怎么不表现多态了?请高手指点!
  42.                int result= ArraysUitls.search(persons,new Person("Two"))


  43.    
  44.                 }
  45. }
  46. }
复制代码
  1. //ArraysUitls.java
  2. public class ArrayUitls
  3. {
  4.         /**
  5.          * 定义一个工具方法,工具方法从字符串数组中找到对应的字符串元素的位置
  6.          * @param array 搜索的数组
  7.          * @param target 搜索的对象
  8.          * @return 目标字符串出现的位置,-1表明找不到
  9.          */
  10.         public static int search(String[] array, String target)
  11.         {
  12.                 for (int i = 0 ; i < array.length ; i++ )
  13.                 {
  14.                         if (array[i]!= null && array[i].equals(target))
  15.                         {
  16.                                 return i;
  17.                         }
  18.                 }
  19.                 return -1;
  20.         }
  21.         public static int search(Object[] array,Object target){
  22.                 for(int i=0;i<array.length;i++){
  23.                         if(array[i]!=null&&array[i].equals(target)){
  24.                                 return i;
  25.                         }
  26.                 }
  27.                 return -1;
  28.         }
  29.        
  30. }
复制代码

论坛徽章:
0
2 [报告]
发表于 2011-12-16 10:02 |只看该作者
晕,你调用的equals参数是String,Object
你看看你写的是什么参数

论坛徽章:
0
3 [报告]
发表于 2011-12-16 10:25 |只看该作者
本帖最后由 navydg 于 2011-12-16 10:29 编辑

没明白楼上的意思。不过问题已经解决了。是我的在重写Person类的equals方法时参数类型搞错了,所以没有重写Object类的equals方法,相当于新写了一个方法。只要把参数类型改成Object就行了

论坛徽章:
0
4 [报告]
发表于 2011-12-16 10:27 |只看该作者
不是这个意思,需要把person类的equals写成object

论坛徽章:
0
5 [报告]
发表于 2011-12-16 10:30 |只看该作者
谢谢楼上的,虽然我昨天已经找到原因了,还是谢谢
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP