为什么会报错,怎么解决?

为什么会报错,怎么解决?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
//测试类
public class Test {
 
public void getMotion(Ball b1)
{
    b1.play();
}
 
    public static void main(String[] args) {
        //完成成员内部类内部测试
        BallTest.Inner_m b1=new BallTest().new Inner_m();
        b1.play();
        //完成方法内部类测试
    BallTest lili=new BallTest();
    lili.info();
        //完成匿名内部类测试
    Test t1=new Test();
    t1.getMotion(new Ball(){
         
        public void play()
        {
            System.out.println("***************");
            System.out.println("匿名内部类");
            System.out.println("打排球");
        }
    });
     
    }
 
}

这个位置的方法内部类一直报错

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
//创建类BallTest
public class BallTest{
     
     
     
     
    // 创建成员内部类Inner_m
public class Inner_m implements Ball{
    public void play()
    {
        System.out.println("成员内部类:");
        System.out.println("打篮球");
   
    }
}
 
 
    // 创建方法内部类
public Object info(){
     
    class Inner_f implements Ball{
         
         
     public void play(){
            System.out.println("*****************");
            System.out.println("方法内部类:");
            System.out.println("打乒乓球:");
            }
             
             
    }
return new Inner_f().play();
}
 
 
 
 
    // 定义一个方法void playBall(Ball ball),调用play()方法
public void playBall(Ball ball)
{
        ball.play();
}
}
1
2
3
4
5
//接口Ball
public interface Ball {
    //创建抽象方法play():void
 void play();
}



正在回答

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

1回答

同学,你好!如下图所示,return返回的是调用内部类的play()方法后的结果,而play()方法的返回值是void,也就是没有返回值,所以会报错。

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

改正后的代码如下:将info方法前的Object改为void,去掉return

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

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

  • 小老哥丶 提问者 #1
    那为什么把play改成Sting类型返回就可以正常呢
    2019-10-07 16:54:07
  • 好帮手慕珊 回复 提问者 小老哥丶 #2
    你好!把play()方法的返回值改成String之后,在play()方法中要添加return语句,返回一个字符串。这样调用play()方法后也会 返回一个字符串,而info方法的返回值类型是Object,它是所有类的父类,所以可以返回任何子类对象,因此返回String类型的对象也是可以的。总之,方法的返回值类型和return后的返回值要一致。祝学习愉快!
    2019-10-07 17:08:04
问题已解决,确定采纳
还有疑问,暂不采纳

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

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

0 星
请稍等 ...
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号

在线咨询

领取优惠

免费试听

领取大纲

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