playBall( )方法传入的是 BallTest类型有什么区别吗?谢谢

playBall( )方法传入的是 BallTest类型有什么区别吗?谢谢

// 定义一个方法void playBall(Ball ball),调用play()方法

    public void playBall(Ball ball){//如果将传入的参数改为BallTest类型

        ball.play();

    }



正在回答

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

2回答

同学你好,接口设计的初衷就是有实现者来重写自己方法中特有的内容!

这里可以这样理解:在playBall(Ball ball)方法中参数Ball就是多态的一个很好的体现,这个方法表示打球的意思,具体打什么球,就看方法的参数Ball是哪个实现类的对象,传入一个实现了Ball接口,重写play方法的对象--->比如:这里重写内容为输出打篮球,就是说这个类实现Ball后的内容是 打篮球!

而这里传入一个BallTest,就只是一个BallTest类,并没有什么意义了哦!并且根据题目要求,BallTest这个类并没有实现Ball这个接口,所以也就无法重写Ball接口中的play方法!

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

如果我的回答解决了你的疑惑,请采纳。祝:学习愉快~

好帮手慕小班 2019-08-20 18:46:04

同学你好,根据题目要求:定义方法 void playBall(Ball ball),调用接口中的 play( ) 方法,这里要求传入的是Ball类型的实现类,这里如果传入的是BallTest 类型的参数,那就只能传入一个BallTest类型的实现类,不能直接实现Ball,重写其中的方法,完成一个匿名内部类的操作了哦!比如:(测试类中)

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

如果我的回答解决了你的疑惑,请采纳。祝:学习愉快~

  • 提问者 菊儿胡同 #1
    还是没明白您说的“”。如果传入的是BallTest类型,在测试类Test中依然可以完成匿名函数啊: BallTest ball = new BallTest(); // 匿名内部类 ball.playBall(new BallTest(){ @Override public void play() { System.out.println("***************\n匿名内部类:\n打排球"); } }); 依然可以通过继承 BallTest 完成对 play( ) 方法的重写啊!!
    2019-08-20 18:54:30
问题已解决,确定采纳
还有疑问,暂不采纳

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

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

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

在线咨询

领取优惠

免费试听

领取大纲

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