关于java的多态的一个问题:比如系统函数System.out.println();这个函数是如何实现多态的
参数可以是任意的类,不修改toString方法就默认输出类名和内存地址,但是类是可以自己随便定义的,请问这个方法的多态是如何实现的。...
参数可以是任意的类,不修改toString方法就默认输出类名和内存地址,但是类是可以自己随便定义的,请问这个方法的多态是如何实现的。
展开
展开全部
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出的类型的方法
这里才是多态
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出的类型的方法
这里才是多态
展开全部
java 的多态是由方法的重载和方法的覆盖来实现的。。。。
toString方法是Object类的方法,而所有的类都是继承Object类的。。。
所以如果子类没有重写toString方法,那么调用的就是该类继承的Object类的toString方法
如果子类重写了toString方法,就调用子类的toString方法。。。
至于默认的toString方法输出类名和内存地址是如何实现的,那我就不知道了~~~
toString方法是Object类的方法,而所有的类都是继承Object类的。。。
所以如果子类没有重写toString方法,那么调用的就是该类继承的Object类的toString方法
如果子类重写了toString方法,就调用子类的toString方法。。。
至于默认的toString方法输出类名和内存地址是如何实现的,那我就不知道了~~~
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
toString方法是继承自Object的这个方法就是输出类的类型和没存地址。
关于System.out.println()方法的实现你可以看看源码。
还有函数重载也是实现多态的一种方式
关于System.out.println()方法的实现你可以看看源码。
还有函数重载也是实现多态的一种方式
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询