方案1和方案2的问题

方案1和方案2的问题

1、先上代码:

//根据传入的不同的人的类型,调用对应的read方法

//方案1:

public void getRead(Man man){

man.read();

}


public void getRead(Woman woman){

woman.read();

}


老师,这段代码没有意义啊,在测试类里直接对象实例化后,调用read方法就可以了:

Man man=new Man();

man.read();

Woman woman=new Woman();

woman.read();


或者使用向上转型:

Person person1=new Man();

person1.read();

Person person2=new Woman();

person2.read();

没有创建getRead方法然后还要重载的必要。


2、先上代码:

//方案2:

public void getRead(Person person){

person.read();

}

老师,参数这里是Person person,在具体传参时,传的是Person的子类引用one和two,并不是父类的引用person。老师,在这里是不是有隐藏的向上转型:

Person one=new Man();

和Person two=new Woman();


3、在课程里,老师全选玩代码后,不知道按了什么键,就把许多行的代码都注释了,老师,在Windows上怎么操作?





正在回答

登陆购买课程后可参与讨论,去登陆

1回答

你好!关于第一个问题,老师是为了引入后面的问题才这么介绍的,这么写确实意义不大,所以后面参数换成了Person,这样就可以传入不同的子类对象了。

第二个问题,这里应该是说方法参数是子类的对象吧,也就是one和two这两个父类引用指向的子类对象。哪个地方有隐藏的向上转型,是指Person one=new Man();这样的语句吗?还是说传参的时候?

http://img1.sycdn.imooc.com//climg/5cf3a7680001a06f07730162.jpg

第三个问题,全选后按ctrl+/进行注释

祝学习愉快!

  • 鱼儿0001 提问者 #1
    谢谢老师的耐心解答我有如下问题:1、你咋就不懂呢,getRead方法的参数是Person person,传的是父类Person的对象引用,而实际传的是子类的对象引用one和two,并不是父类的对象引用,这里的one和two难道不是隐藏的向上转型吗?不然one和two怎么能传进去?2、关于称呼方面,我把one和two称为引用,难道有错啊?one和two本身就不是对象,真正的对象是new Man();和new Woman();,one和two只是指向对象的引用,我的称呼错了吗?
    2019-06-03 15:13:44
  • 好帮手慕珊 回复 提问者 鱼儿0001 #2
    你好!多态不是隐藏的向上转型,里面涉及到底层jvm的实现,不是三言两语能说清楚的,涉及到很多概念,并且有一些项目经验最好。建议同学就业班的课程都学完,或者工作以后再去研究一下。另外,one和two是引用是没问题的。祝学习愉快!
    2019-06-03 18:54:52
  • 鱼儿0001 提问者 回复 好帮手慕珊 #3
    老师好,getRead方法的参数是Person person,而传的是子类的对象引用one和two,那么你说这不是隐藏的向上转型,那是什么?
    2019-06-04 10:07:58
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师