分别通过成员内部类、方法内部类、匿名内部类完成接口Ball,在测试类BallTest中的调用。
任务
任务分析:
1.创建接口Ball
- 包含抽象方法play( )
2创建外部类BallTest
- 定义方法 void playBall(Ball ball),调用接口中的play( )方法
3.分别通过成员内部类、方法内部类以及匿名内部类完成接口实现
- 在BallTest中,创建成员内部类Inner_m 实现接口Ball,在类中重写play()方法,输出两条信息,分别为"成员内部类:"和"打篮球*
- 在BallTest中,创建成员方法info),在方法中创建方法内部类Inner f实现Ball接口,重写play()方法,输出三条信息,分别为"**********”,"方法内部类:"和“打乒乓球"
- 在测试类Test中通过匿名内部类实现接口Ball,并重写play()方法,输出两条信息,分别为“***************”,"匿名内部类:"和"打排球"
4.创建测试类Test,通过创建BallTest类及相关内部类实例,调用相关方法,依次完成相关内部类测试。
运行效果参见效果图
思路分析
成员内部类对象实例3种方式
// 成员内部类对象实例,方式1:new 外部类.new 内部类
BallTest.Inner_m one = new BallTest().new Inner_m();
// 成员内部类对象实例,方式2:外部类对象.new 内部类
BallTest bt = new BallTest();
Inner_m two = bt.getInner_m();
two.play();
// 成员内部类对象实例,方式3:外部类对象.获取方法
Inner_m three = bt.getInner_m();
three.play();
代码实现
Ball.java
public interface Ball {
// 创建抽象方法play
public abstract void play();
}
BallTest.java
public class BallTest {
// 调用接口中的play方法
public void playBall(Ball ball) {
ball.play();
}
public Inner_m getInner_m() {
return new Inner_m();
}
// 成员内部类
public class Inner_m implements Ball {
public void play() {
System.out.println("成员内部类:\n打篮球");
}
}
// 方法内部类
public Ball info() {
class Inner_f implements Ball {
@Override
public void play() {
// TODO Auto-generated method stub
System.out.println("***************");
System.out.println("方法内部类:\n打乒乓球");
}
}
return new Inner_f();
}
}
Test.java
public class Test {
public static void main(String[] args) {
// 完成成员内部类测试
BallTest.Inner_m one = new BallTest().new Inner_m();
one.play();
// 完成方法类测试
BallTest two = new BallTest();
Ball ball = two.info();
ball.play();
// 完成匿名内部类测试
BallTest three = new BallTest();
three.playBall(new Ball() {
@Override
public void play() {
// TODO Auto-generated method stub
System.out.println("***************");
System.out.println("匿名内部类:\n打排球");
}
});
}
}
输出结果