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

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

//接口Ball
public interface Ball {
    //创建抽象方法play():void
    void play();
}
//创建类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(){
        
    }
}
//测试类
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下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

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