6-10作业

6-10作业

这是我的代码,麻烦老师帮我看一下怎么改进呀

Ball.java

//接口Ball

public interface Ball {

// 创建抽象方法play():void

public abstract void play();

}

BallTest.java

//创建类BallTest

public class BallTest {


// 创建成员内部类Inner_m

class Inner_ml implements Ball {

public void play() {

System.out.println("成员内部类:\n打篮球");

}

}


// 创建方法内部类

public void info() {

class Inner_f {

public void play() {

System.out.println("****************");

System.out.println("方法内部类\n打乒乓球");

}

}

new Inner_f().play();

}


// 定义一个方法void playBall(Ball ball),调用play()方法

void playBall(Ball ball) {

ball.play();

}

}

Test.java

//测试类

public class Test {


public static void main(String[] args) {

// 完成成员内部类内部测试

BallTest b = new BallTest();

BallTest.Inner_ml t = b.new Inner_ml();

t.play();


// 完成方法内部类测试

b.info();


// 完成匿名内部类测试

Ball ball = new Ball() {

public void play() {

System.out.println("****************");

System.out.println("匿名内部类\n打排球");

}

};

ball.play();


}


}


另外,还想问一下:为什么Test()里面不需要写“implements Ball”就可以实例化Ball?那什么时候需要写,什么时候不需要写呢?

打开调试之后,控制台会显示:JRE Oracle Corporation/12 is not supported, advanced source lookup disabled. 什么意思呀?怎么解决?谢谢!

正在回答

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

2回答

同学你好,1、implements Ball之后,play方法才是对Ball中play的重写,这里理解的是非常正确的哦!

2、Ball ball = new Ball({·····})  这是就是一个实现了Ball接口的匿名内部类哦

3、匿名内部类可以实现接口,也可以实现父类,但是不可兼得

这句话的意思是,1)、匿名内部类可以直接通过new一个抽象父类,来实现一个继承父类的类,比如:

在课程案例中  test.getRead(new Person(){

                        public void read(){

                                System.out.println("男生喜欢看科幻类书");

                          }

           })

    2)、匿名内部类可以直接通过new一个接口,来实现接口,例如本题目中的:

               Ball ball = new Ball() {

                         public void play() { 

                               System.out.println("****************");

                               System.out.println("匿名内部类\n打排球");

                     } };

这两者都是都是匿名内部类,但是一个是继承父类(抽象父类)  -->new  Person(){},另一个是实现接口

-->new  Ball(){}   这两个在匿名内部类中不能同时实现,比如:new  Person() implement  Ball{},这样的写法就是错误的哦!这样会不知道是要继承还是要实现!

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

好帮手慕小班 2019-05-29 11:48:58

同学你好,1、复制运行同学代码,运行效果没有问题哦!但是根据题目要求:在方法中创建方法内部类 Inner_f 实现Ball接口,重写 play( ) 方法,输出三条信息,分别为"**********","方法内部类:" 和 "打乒乓球"!

所以同学的方法内部类并没有实现Ball接口哦!修改建议如下:

http://img1.sycdn.imooc.com//climg/5cedfe5d00010ba106780296.jpg

2、匿名内部类这么写是没有问题的,因为是匿名,所以不用写出来类的名字,通过new Ball()就是实现了接口Ball了。而要写implements Ball来实现接口是在类中实现Ball接口!

3、控制台这个语句的意思是jre版本过高,这个语句影响同学的正常测试吗,如果影响建议换一个版本低一点的JDK,如果不影响,同学就这样先用吧!

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

  • 提问者 qq_心晴_29 #1
    谢谢。下面这段代码中的play只是一个普通方法,跟Ball接口没有关系。但是改成您说的这种class Inner_f implements Ball之后,play方法才是对Ball中play的重写,我这样理解对吗? // 创建方法内部类 public void info() { class Inner_f { public void play() { System.out.println("****************"); System.out.println("方法内部类\n打乒乓球"); } } new Inner_f().play(); } 另外,课上讲“匿名内部类可以实现接口,也可以实现父类,但是不可兼得”,下面这段代码是实现接口吗?可以举个继承父类的例子吗?感觉对“不可兼得”不是很理解为什么。谢谢 Ball ball = new Ball() { public void play() { System.out.println("****************"); System.out.println("匿名内部类\n打排球"); } };
    2019-05-29 12:23:31
问题已解决,确定采纳
还有疑问,暂不采纳

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

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

0 星

相似问题

登录后可查看更多问答,登录/注册

请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

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