6-10匿名内部类和playBall(Ball ball)问题

6-10匿名内部类和playBall(Ball ball)问题

1
2
3
4
5
//接口Ball
public interface Ball {
    //创建抽象方法play():void
    void play();
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
//创建类BallTest
public class BallTest implements Ball {
    // 创建成员内部类Inner_m
    public class Inner_m{
        public void play(){
            System.out.println("成员内部类");
            System.out.println("打篮球");
        }
    }
    // public Inner_m getInner_m(){
    //     return new Inner_m();
    // }
    // 创建方法内部类
    public void info(){
        class Inner_f implements Ball{
            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();
    }
     
    public void play(){
         
    }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
//测试类
public class Test {
 
    public static void main(String[] args) {
        //完成成员内部类内部测试
        BallTest one = new BallTest();
        BallTest.Inner_m myBall=one.new Inner_m();
        myBall.play();
        //完成方法内部类测试
        one.info();
        //完成匿名内部类测试
        one.playBall(new BallTest(){
                public void play(){
                System.out.println("**************");
                System.out.println("匿名内部类");
                System.out.println("打排球"); 
                }
        });
    }
 
}

想请问一下为什么BallTest类中要写playBall这个函数,以及匿名内部类为什么要那么写(无论是new Ball()还是new BallTest()为什么都可以编译成功?)

正在回答

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

2回答

playBall(Ball ball)这个方法的作用就是打球,具体打什么球要看传入的参数是什么类型的Ball,所以Ball的实现类很重要,如果参数是篮球,那么这个方法就是打篮球。同样,如果是乒乓球,那么这个方法就是打乒乓球。这个就是多态的体现,所以Ball这个接口还是有用的。

至于匿名内部类为什么这么写,这个就是java的语法规则的问题了,语法规定就是可以的。

祝学习愉快!


  • ZaraYi 提问者 #1
    非常感谢!
    2018-02-26 12:26:21
慕虎8754231 2018-02-24 19:16:29

BallTest类中要写playBall这个函数只是老师设置的一个烟雾弹,实际上跟这个练习的关联不大;匿名内部类都可以(无论是new Ball()还是new BallTest()为什么都可以编译成功?)通过,我觉得应该Ball是BallTest的抽象类的原因。

  • 提问者 ZaraYi #1
    Ball不是一个接口么。。。
    2018-02-24 19:49:53
  • 慕虎8754231 回复 提问者 ZaraYi #2
    这个应该是java的语法规则的问题了,语法规定就是可以的。
    2018-02-25 18:26:13
问题已解决,确定采纳
还有疑问,暂不采纳

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

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

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

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

帮助反馈 APP下载

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

公众号

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

在线咨询

领取优惠

免费试听

领取大纲

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