求救,老师帮我优化一下。虽然实现了代码,但是感觉有一些小问题
public interface Ball {
//创建抽象方法play():void
public abstract void play();
}
public class BallTest{
// 创建成员内部类Inner_m
public class Inner_m implements Ball{
public void play() {
System.out.println("成员内部类:"+"\n打篮球");
}
}
// 创建方法内部类
public Object info() {
class Inner_f implements Ball{
@Override
public void play() {
System.out.println("************");
System.out.println("方法内部类:"+"\n打乒乓球");
}
public String doe() {
play();
return "";
}
}return new Inner_f().doe();
}
// 定义一个方法void playBall(Ball ball),调用play()方法
public void playBall(Ball ball) {
BallTest ba=new BallTest();
ba.info();
}
}
public class Test {
public void getPlay(Ball ball) {
ball.play();
}
public static void main(String[] args) {
//完成成员内部类内部测试
BallTest.Inner_m inner=new BallTest().new Inner_m();
inner.play();
//完成方法内部类测试
BallTest te=new BallTest();
System.out.println(te.info());
//完成匿名内部类测试
System.out.println("****************");
Test tes=new Test();
tes.getPlay(new Ball() {
public void play() {
System.out.println("匿名内部类"+"\n打排球");
}
});
}
}老师,我的代码感觉是有点问题的:
①BallTest类我增加了一个 doe方法后,在测试类才完成了 方法内部类的测试。当没有doe方法,并且 方法info 返回值类型为void时,Test测试类无法正常输出play方法(或者是我调用方式不对),请老师指点一下。
②方法info 必须为带返回值的类型吗? 为何我用void在测试类无法正常调用play呢?
③老师帮看一下,我代码除了上述我的两个问题,是否还有别的问题
感谢老师
正在回答 回答被采纳积分+1
同学你好,老师直接分析同学代码中存在的问题,也许可以间接回答同学的疑问:
1.方法内部类这部分,同学采用的返回字符串的形式进行打印输出。实际上可以直接测试类中调用info方法,并且使打印语句只在info方法中就可以了,这样就可以不去声明doe方法。修改后的代码如下图:


2.BallTest类中的playBall(Ball ball)方法实现有问题,这里应当是一个多态的形式,参数传入Ball接口的实现类,通过多态调用play方法。而同学的实现调用info,与题目要求完全不同。修改后的代码如下图:

3.匿名内部类的书写:匿名内部类的书写语法应该是“接口类型 对象名 = new 接口名(参数列表){接口方法的重写}”的格式,而同学的代码中单独声明了一个方法,实际上是不必要的。修改后的代码如下图:

完整的代码如下:
package com.imooc.test;
public interface Ball {
// 创建抽象方法play():void
public abstract void play();
}package com.imooc.test;
public class BallTest {
// 创建成员内部类Inner_m
public class Inner_m implements Ball {
public void play() {
System.out.println("成员内部类:" + "\n打篮球");
}
}
// 创建方法内部类
// public Object info() {
public void info() {
class Inner_f implements Ball {
@Override
public void play() {
System.out.println("************");
System.out.println("方法内部类:" + "\n打乒乓球");
}
// public String doe() {
// play();
// return "";
// }
}
new Inner_f().play();
// return new Inner_f().doe();
}
// 定义一个方法void playBall(Ball ball),调用play()方法
public void playBall(Ball ball) {
// BallTest ba = new BallTest();
// ba.info();
ball.play();
}
}package com.imooc.test;
public class Test {
// public void getPlay(Ball ball) {
// ball.play();
// }
public static void main(String[] args) {
// 完成成员内部类内部测试
BallTest.Inner_m inner = new BallTest().new Inner_m();
inner.play();
// 完成方法内部类测试
BallTest te = new BallTest();
// System.out.println(te.info());
te.info();
// 完成匿名内部类测试
System.out.println("****************");
// Test tes = new Test();
// tes.getPlay(new Ball() {
// public void play() {
// System.out.println("匿名内部类" + "\n打排球");
// }
// });
Ball b = new Ball() {
public void play() {
System.out.println("匿名内部类" + "\n打排球");
}
};
b.play();
}
}
祝学习愉快~
- 参与学习 人
- 提交作业 8788 份
- 解答问题 9886 个
综合就业常年第一,编程排行常年霸榜,北上广深月薪过万! 不需要基础,无需脱产即可学习,只要你有梦想,想高薪! 全新升级:技术栈升级(包含VUE3.0,ES6,Git)+项目升级(前后端联调与功能升级)
了解课程
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星