黑马程序员技术交流社区
标题: 对输出语句的疑问 [打印本页]
作者: 木木赤赤 时间: 2013-11-26 10:06
标题: 对输出语句的疑问
本帖最后由 木木赤赤 于 2013-11-26 10:59 编辑
对输出语句的疑问
下面的红框里接受的是Object的对象,而上面的红框里要输出的是字符串和值,我想不明白了,这时如何输出的呢?有点转不过弯来,帮忙解释一下,谢谢!
-
clip_image001.jpg
(64.47 KB, 下载次数: 30)
作者: 爱上这格调 时间: 2013-11-26 10:14
输出语句接受的对象是Object类型,这里用到多态的知识,一切对象都是他的子类,所以不管传进去什么,都能够接受,所以能打印出来
作者: 一直很安静 时间: 2013-11-26 10:18
字符串和任何东西相加都变成字符串,而字符串是Object的子类
作者: 樊志伟 时间: 2013-11-26 10:21
这里涉及到的知识点就是好多态以及类型转换。
println()方法可以接收任何对象,不管是基本数据类型还是对象还是数组还是字符串。
而上面的sop中的字符串加数字("size:"+al.size();)会被自动转换成字符串对象,也就是说
("size:"+al.size();)实际就是一个字符串。而String也是Object的子类,所以sop方法就会输出
字符串。
作者: 回天之力 时间: 2013-11-26 10:23
sop("size:"+al.size());这个调用语句,sop函数中的参数为Object。那么"size:"+al.size(),表达式得出的结果是String类型的字符串。String是继承根类Object,所以可以把子类作为参数传入函数。用到多态的知识。
作者: 忄雾飞扬 时间: 2013-11-26 10:38
- public class Demo4 {
- public static void main(String[] args) {
-
- //多说一句:这里加泛型更安全些,ArrayList<String> al = new ArrayList<String>();把问题出现在编译阶段
- ArrayList al = new ArrayList();
- al.add("java01");
- al.add("java02");
- al.add("java03");
- al.add("java04");
- //在java中,int型数值加字符串肯定得到一个字符串
- sop("size:" + al.size());
-
- }
- //Object 代表参数类型java中万物皆对象,Object相当于上帝是所有对象的父类; obj则是该函数接收的一个实例对象
- public static void sop (Object obj){
- //下面这句话实际上是自动调用了实例对象obj的toString()方法
- //System.out.println(obj.toString());
- System.out.println(obj);
- }
- }
复制代码
作者: 樊志伟 时间: 2013-11-26 10:40
另外,我告诉你,为什么println方法可以输出任何对象。
API中,println方法是有很多重载形式的,这些println方法接收的参数有空参数,boolean,char,char[],double,float,int,long,String,Object等
下面是API中的截图
所以,你的sop方法里的println就是复写了参数为Object的println方法。
而这个方法首先调用 String.valueOf(x) 获取打印对象的字符串值,然后的行为如同先调用print(String)再调用println() 一样。
而String.valueOf()这个方法会自动调用toString方法,所以最后会打印字符串。你可以通过复写toString方法来验证这一点,我验证了,很对。
- class test {
- public static void main(String[] args) {
- A a = new A();
- System.out.println(a);
- }
- }
- class A
- {
- public String toString()
- {
- System.out.println("toString");
- return "";
- }
- }
复制代码 最后的输出结果是:
toString
-
QQ截图20131126102528.jpg
(68.36 KB, 下载次数: 12)
Api截图
作者: 王雷1 时间: 2013-11-26 11:20
按老师视频里说的就是你别想那么多,Object就是上帝,他什么都能接手,像字符串,基本类型,方法,数组,都没有问题,因为任何东西都有一个返回值,而这里的Object接受的就是这个返回值。前面跟的又是一个打印语句,意思就是说,你的打印语句可以打印任意类型的返回值。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) |
黑马程序员IT技术论坛 X3.2 |