老师好,麻烦帮我看一下;
来源: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回答
同学你好,同学可以将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();
}
}如果我的回答解决了你的疑惑,请采纳!祝学习愉快!
好帮手慕小尤
2020-02-17
同学你好,1. 练习作业中并没有让同学定义Object类型的返回值,在注释中有提示设置为void类型。如下图所示:

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

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