为什么我子类调用父类方法用get方法却打印不出来name值,使用toString就行,同样是返回了 name啊?
你只是在 get() 方法中调用了 super.getName() ,并没有打印它的返回值,也没有将返回值赋值给某个变量进行打印
哦哦,好像是这样,那toString()是直接可以打印的吗?
@陈同学930216: toString() 方法中返回了 name 的值
@dudu: getName()也返回了name值啊
我子类调用父类的toString()方法也没有传值给父类引用啊,为什么toString方法就可以打印出来呢?
@陈同学930216: 但是你打印的是a.get()
,它返回的是 test 的值
@陈同学930216: 子类的 toString()
中返回了父类 toString()
的值,这只是方法返回值的问题
@dudu: 那我有一点问题,就是我打印a.get()的时候返回test,那时候不是会调用基类的getName()方法,那时候 不是返回了基类的name吗?如果你说我没把name的值没赋值给变量,test赋值给a,那么子类toString()方法调用的时候是不是先 a指向test指的值,然后返回父类的toString()方法的时候a指向父类name的值吗?调用getName()的时候为什么就不会指到name那个返回值呢?
@dudu: 奥,我知道了 ,我把name搞错了 ,基类name是私有的,指不到那边,还是谢谢你
这次我真的明白了 get方法后面没有返回name,如果get方法像toString方法那样再返回基类方法就可以打印出来,还是要谢谢前辈
name基类是私有的
你还是没有搞懂!!呵呵,你认真把你的代码读一读。。。
@David5201: 啊,不是私有的问题啊?
@陈同学930216: 看你这么认真的分上,我给你白话白话。呵呵!
1,E_15 a = new E_15("BOD",49); 利用public E_15(string name,int num) 生成一个a对象。这句话,把name 与 test赋值为bod 与49。
2,a对象调用get()方法。
public int get(){ super.getName(); return test; }
你就是这里没有搞明白吧。。 你看,这里就return了一个test,就是你1里面赋值的49.自然,
system.out.println(a.get()) 打印的就是49.这个没有问题吧。
3,system.out.println(a); 因为,所有的对象都是继承object对象。 并且实现了toString()方法。打印a.toString() ....(不对,你打印的是对象。。不是打印的a.toString()啊。。)
@David5201: 现在知道了 我的问题出在你和我说的第二点,不是第三点,不管怎么样还是要谢谢你
话说你的get方法里只返回了test这个值,name你并没有返回,当然不会输出
奥 我明白了 如果再get方法里再返回getName方法就可以打印出来 是吗?
@陈同学930216: 对,你get方法里已经返回了test所以你可以看到test的值,如果放test和name那你两个都可以看到。按照你所说的因为你getName方法里已经返回了name ,所以你在get方法里再返回getName方法也是可以的