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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 王钊 中级黑马   /  2013-2-24 19:14  /  1636 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 王钊 于 2013-2-25 21:41 编辑

有人问过这样的题,但我还是不明白
  1. public class Test {

  2.     /**
  3.      * @param args
  4.      */
  5.     public static void main(String[] args) {
  6.             // TODO Auto-generated method stub
  7.             int[]arr={3,2,4};
  8.             Arrays.sort(arr);
  9.             System.out.println(toString(arr));
  10.             //这里编译错误,提示:类型 Object 中的方法 toString()对于参数(int[])不适用
  11.             

  12.             int index=Arrays.binarySearch(arr,3);
  13.             System.out.println(index);

  14.     }

  15. }
复制代码
为什么提示这样,api文档中所有的Arrays的toString()方法,都带有一个数组参数,那么如果直接调用toString(arr)的话,
不会找Object的toString()这个不带参数的方法啊,况且也不可能是重写了toString()方法,重写要求方法名,参数个数和类型一致,返回值类型一致,
那么Arrays中的这些toString(args)应该是独立的方法,静态导入后传入参数应该可以定位到特定的一个toString(args)方法,为什么不行呢?

点评

毕老师有明确讲解,这个技术分给水了  发表于 2013-2-25 21:06

评分

参与人数 1技术分 +1 收起 理由
Rancho_Gump + 1

查看全部评分

3 个回复

倒序浏览
本帖最后由 吴硕 于 2013-2-24 19:38 编辑

直接写toString(arr),而父类Object中有一个toString()方法
因为方法名都是toString,就会优先匹配Object中的toString()方法
为什么会优先匹配Object中的方法,因为Object中存在一个方法名一样的方法

问题的关键是:
1)没有指定具体的调用类
2)方法名在子父类中都有

评分

参与人数 1技术分 +1 收起 理由
Rancho_Gump + 1

查看全部评分

回复 使用道具 举报
本帖最后由 司懿卓 于 2013-2-26 11:10 编辑

Object的toString() 方法是没有参数传入的 .
其所有子类对象的toString方法也没有参数传入..
但是Arrays工具类有重写toString方法,因为是静态的,需要Arrays调用.

回复 使用道具 举报
哎,我看静态导入把你们导糊涂了,我们学父类子类的时候都知道这一点,当调用一个子类不存在的函数时,程序会去父类查找有没有这样函数.
如果有,就用了.因为继承关系.System.out.println(toString(arr));//arr代表数组
Object类中:toString方法原型:
public String toString()
我们自己写的类,你写的没有复写过toString()方法,没有重载过toString()带参数的方法,当然会报错.
至少静态导入.
他的格式是这样的:import public java.util.Arrays;
调用时应该是这样的 Arrays.   不能省略了Arrays
省略了就相当于我们自己在类外调用我们写好的静态类方法时不是写: 类名.方法()而是写成了方法()当然会报错!   
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马