老师好,麻烦帮我看一下;

来源:6-10 编程练习

Michael_2020

2020-02-16 21:08:56

帮我看一下,我这里为什么要把接口中抽象方法中的返回值也定义成Object呢?和老师讲的不一样

原本是定义void的,后来写到方法内部类,返回return new Inner_f().play();的时候就报错了。

是我哪里做错了呢?

package com.yito.ball;

public interface Ball {
    //创建抽象方法play():void
    public abstract Object play();
}
package com.yito.ball;

public class BallTest {
    // 创建成员内部类Inner_m
    public class Inner_m implements Ball{
        @Override
        public Object play() {
            System.out.println("成员内部类:");
            System.out.println("打篮球");
            return null;
        }
    }
    public Inner_m getInner_m(){
        return new Inner_m();
    }


    // 创建方法内部类
    public Object info(){
        class Inner_f implements Ball{
           @Override
           public Object play() {
               System.out.println("*************");
               System.out.println("方法内部类:");
               System.out.println("打乒乓球");
               return null;
           }
        }
        return new Inner_f().play();
    }

    // 定义一个方法void playBall(Ball ball),调用play()方法
    public void playBall(Ball ball){
        ball.play();
    }

}
package com.yito.ball;

public class Test {
    public static void main(String[] args) {
        //完成成员内部类内部测试
        BallTest one = new BallTest();
        one.getInner_m().play();

        //完成方法内部类测试
        one.info();

        //完成匿名内部类测试
        one.playBall(new Ball() {
            @Override
            public Object play() {
                System.out.println("*************");
                System.out.println("匿名内部类:");
                System.out.println("打排球");
                return null;
            }
        });

    }
}


写回答

2回答

好帮手慕小尤

2020-02-17

同学你好,同学可以将Ball接口中的play()方法以及重写play()方法返回类型修改为void。修改后代码如下:

Test 类

public class Test {
    public static void main(String[] args) {
        //完成成员内部类内部测试
        BallTest one = new BallTest();
        one.getInner_m().play();

        //完成方法内部类测试
        one.info();

        //完成匿名内部类测试
        one.playBall(new Ball() {
        	// 修改为void
            @Override
            public void play() {
                System.out.println("*************");
                System.out.println("匿名内部类:");
                System.out.println("打排球");
            }
        }); 

    }
}

Ball 类

public interface Ball {
    //创建抽象方法play():void
	// 修改为void
    public abstract void play();
}

BallTest 类

public class BallTest {
    // 创建成员内部类Inner_m
    public class Inner_m implements Ball{
    	// 修改为void
        @Override
        public void play() {
            System.out.println("成员内部类:");
            System.out.println("打篮球");
        }
    }
    public Inner_m getInner_m(){
        return new Inner_m();
    }


    // 创建方法内部类
    // 修改为void
    public void info(){
        class Inner_f implements Ball{
           @Override
           // 修改为void
           public void play() {
               System.out.println("*************");
               System.out.println("方法内部类:");
               System.out.println("打乒乓球");
           }
        }
        new Inner_f().play(); 
    }

    // 定义一个方法void playBall(Ball ball),调用play()方法
    public void playBall(Ball ball){
        ball.play();
    }

}

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

0

好帮手慕小尤

2020-02-17

同学你好,1. 练习作业中并没有让同学定义Object类型的返回值,在注释中有提示设置为void类型。如下图所示:

http://img.mukewang.com/climg/5e4a017909d7d72c02650115.jpg

2.如果在play()进行返回,会导致出现重复返回值,导致异常。所以同学在info()方法中创建内部类对象,通过对象调用内部类方法,来使用局部内部类功能即可。

http://img.mukewang.com/climg/5e4a050309e144e006590367.jpg

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

0
hichael_2020
h 如果需要设置成void,我该如何修改?谢谢
h020-02-17
共1条回复

0 学习 · 11489 问题

查看课程