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

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

//测试类
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("打排球");
	    }
	});
	
	}

}

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

//创建类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();
}
}
//接口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下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

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