问题详见问题描述

问题详见问题描述

//接口Ball
public  interface Ball {
    //创建抽象方法play():void
    abstract void play();
}
//创建类BallTest
public class BallTest {
    // 创建成员内部类Inner_m,在BallTest中,创建成员内部类 Inner_m 实现接口Ball,在类中重写 play( ) 方法,输出两条信息,分别为"成员内部类:"和"打篮球"
    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();
    }
}
//测试类
public class Test {

    public static void main(String[] args) {
		//完成成员内部类内部测试
	BallTest.Inner_m one=new BallTest().new Inner_m();
		//完成方法内部类测试
	BallTest two= new BallTest();
	two.info();
		//完成匿名内部类测试
	BallTest three= new BallTest();
	three.playBall(new Ball(){
	    public void play(){
	        System.out.println("*********");
            System.out.println("匿名内部类:");
			System.out.println("打排球");
	    }
	    });
	}

}

问题描述:

BallTest.java:19: error: incompatible types: void cannot be converted to Object
        return new Inner_f().play();
                                 ^
1 error

请问老师教学中就是用的Object+return new,为什么我这样写就报错?

尝试过的解决方式:

public void info(){
        class Inner_f implements Ball{
            public void play(){
            System.out.println("**********");
			System.out.println("方法内部类:");
			System.out.println("打乒乓球");  
            }
        }
         new Inner_f().play();
    }

另外如果我改成这一段后,为什么能正常输出但结果没有成员内部类的内容呢?

运行成功

**********
方法内部类:
打乒乓球
*********
匿名内部类:
打排球


正在回答 回答被采纳积分+1

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

1回答
好帮手慕小脸 2022-09-16 11:25:20

同学你好,

1、上述异常是不兼容的类型,这里return 直接返回new Inner_f();即可

https://img1.sycdn.imooc.com//climg/6323ec3209d5357405010323.jpg

2、这里需要调用对应的play方法,才会在控制台输出对应提示语句

https://img1.sycdn.imooc.com//climg/6323ec8c092e2b9306670137.jpg

祝学习愉快~

  • 提问者 啦啦啦皮皮卡丘 #1

    请问老师可以具体描述一下这个不兼容问题吗?为什么return Inner_f就可以了呢?

    2022-09-16 11:29:27
  • 同学你好,play方法的返回值类型是void,即不会有任何返回,此时调用play方法之后不会获得任何返回值。

    但是在info方法中,要求返回Object类型的数据。显然的,此时return语句无法满足返回值类型Object的约定,就会报错。

    祝学习愉快~


    2022-09-16 11:55:17
问题已解决,确定采纳
还有疑问,暂不采纳

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

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

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

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

帮助反馈 APP下载

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

公众号

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

在线咨询

领取优惠

免费试听

领取大纲

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