关于java的多态的一个问题:比如系统函数System.out.println();这个函数是如何实现多态的

参数可以是任意的类,不修改toString方法就默认输出类名和内存地址,但是类是可以自己随便定义的,请问这个方法的多态是如何实现的。... 参数可以是任意的类,不修改toString方法就默认输出类名和内存地址,但是类是可以自己随便定义的,请问这个方法的多态是如何实现的。 展开
 我来答
kejiaweiren
2011-01-28 · TA获得超过6740个赞
知道大有可为答主
回答量:1774
采纳率:0%
帮助的人:3357万
展开全部
System.out.println();是用重载来实现的。而不是多态。
System.out.println();会默认调用toString方法

如果是System.out.println(11);
请看源码
public void println(int x) {
synchronized (this) {
print(x);
newLine();
}
}

---------
public void print(int i) {
write(String.valueOf(i));
}
----
public static String valueOf(int i) {
return Integer.toString(i, 10);//这里调用了toString方法
}
public static String valueOf(long l) {
return Long.toString(l, 10);
}
....很多

-----------------------------------------------
如果是System.out.println(new Object());

public void println(Object x) {
String s = String.valueOf(x);
synchronized (this) {
print(s);
newLine();
}
}

public void print(String s) {
if (s == null) {
s = "null";
}
write(s);
}
public static String valueOf(Object obj) {
return (obj == null) ? "null" : obj.toString();//这里调用了toString方法

}

----------------------------
接下来你的问题
不修改toString方法就默认输出类名和内存地址,但是类是可以自己随便定义的,请问这个方法的多态是如何实现的。

你重写了toString,而
public String toString() {
return getClass().getName() + "@" + Integer.toHexString(hashCode());
}
是动态绑定,所以他调用new出的类型的方法
这里才是多态
pmyC5992
2011-01-28 · 超过26用户采纳过TA的回答
知道答主
回答量:85
采纳率:0%
帮助的人:78.4万
展开全部
java 的多态是由方法的重载和方法的覆盖来实现的。。。。
toString方法是Object类的方法,而所有的类都是继承Object类的。。。
所以如果子类没有重写toString方法,那么调用的就是该类继承的Object类的toString方法
如果子类重写了toString方法,就调用子类的toString方法。。。
至于默认的toString方法输出类名和内存地址是如何实现的,那我就不知道了~~~
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
greatdoudou
2011-01-28 · TA获得超过171个赞
知道小有建树答主
回答量:335
采纳率:100%
帮助的人:276万
展开全部
toString方法是继承自Object的这个方法就是输出类的类型和没存地址。
关于System.out.println()方法的实现你可以看看源码。
还有函数重载也是实现多态的一种方式
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式