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()为什么都可以编译成功?)
38
收起
正在回答
2回答
playBall(Ball ball)这个方法的作用就是打球,具体打什么球要看传入的参数是什么类型的Ball,所以Ball的实现类很重要,如果参数是篮球,那么这个方法就是打篮球。同样,如果是乒乓球,那么这个方法就是打乒乓球。这个就是多态的体现,所以Ball这个接口还是有用的。
至于匿名内部类为什么这么写,这个就是java的语法规则的问题了,语法规定就是可以的。
祝学习愉快!
Java零基础入门18
- 参与学习 人
- 提交作业 7317 份
- 解答问题 14452 个
想要入门学编程?多年一直活跃在编程语言排行版前列的Java是一个很好的选择。本路径将从Java基础语法、面向对象、常用工具类三部分,为你开启软件开发的大门!
了解课程
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星