6.9,匿名内部类怎么实现接口?

6.9,匿名内部类怎么实现接口?

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
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
//测试类
public class Test {
 
  public static void main(String[] args) {
        //完成成员内部类内部测试
     BallTest.Inner_m a=new BallTest().new Inner_m();
     System.out.println(a.play());
        //完成方法内部类测试
    BallTest a1=new BallTest();
    System.out.println(a1.info());
        //完成匿名内部类测试 
     Test test=new Test();
     test.getRoad(new Test() {//题意说要在匿名内部类中实现接口,怎么做?
          
     });
    }
 
private void getRoad(Test test) {
    // TODO Auto-generated method stub
     
}
 
 
}
 
//创建类BallTest
public class BallTest implements Ball{
 
    public String play() {
        // TODO Auto-generated method stub
        return null;
    }
  // 创建成员内部类Inner_m
    public Inner_m getInner_m(){
        return new Inner_m();
    }
   class Inner_m implements Ball{
 
    public String play() {
        // TODO Auto-generated method stub
        return "成员内部类"+'\n'+"打篮球";
    }
     
      
   }
 
    // 创建方法内部类
    public String info(){
        class Inner_f implements Ball{
               public String play(){
                   return "********"+'\n'+"方法内部类"+'\n'+"打乒乓球";
               }
           }
        return new Inner_f().play();
    }
 
    // 定义一个方法void playBall(Ball ball),调用play()方法
   
}
public interface Ball {
       abstract String play();
}


正在回答

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

3回答

当接口定义为:

1
2
3
public interface Ball {
  public void play();
}

BallTest定义为:

1
2
3
4
5
public class BallTest {
   public void playBall(Ball ball) {
     ball.play();
   }
}

可以在main方法中:

1
2
3
4
5
6
BallTest anony=new BallTest();
anony.playBall(new Ball(){
    public void play(){
      System.out.println("匿名内部类:");
    }
});

我是这么写的~~~

  • 瞳劫 提问者 #1
    非常感谢!
    2017-01-24 14:34:05
好帮手慕珊 2017-01-22 09:19:49

匿名内部类,匿名就是没有显示的定义类的名字,在需要的时候直接实现接口并同时创建了对象。就像上面ShawnGao说的格式,new 父类构造器(参数列表)|实现接口() { //匿名内部类的类体部分 },这句话实际上就是生成了一个对象。

对于初学者来说,面向对象的有些知识不大好理解,我的建议是现阶段要熟记各种语法格式,然后通过练习去慢慢理解这些格式的作用。在后面的Android里,匿名内部类在监听事件中是用的非常多的。

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

  • 提问者 瞳劫 #1
    谢谢,能在详细一点跟我说嘛?在哪个地方加上interface接口什么的,十分感谢.
    2017-01-22 11:13:53
ShawnGao 2017-01-22 00:26:11

如果我没理解错误的话,在匿名内部类中实现接口就是直接new 接口

1
2
BallTest ballTest=new BallTest();
ballTest.playBall(new Ball() {重写接口方法})

因为题目修改前是要求通过playBall方法来实现,所以我这是用ballTest.playBall(new Ball(){})来完成的

  • 提问者 瞳劫 #1
    可是这样算匿名内部类的吗,不是匿名内部类没有实例化对象吗
    2017-01-22 00:50:13
  • ShawnGao 回复 提问者 瞳劫 #2
    我基础知识也不太扎实,我记得匿名内部类是没有名字的内部类,没有class 关键字,直接使用new来生成一个对象的引用。当然这个引用是隐式的。至于没有实例化对象这一点,我没有看到有资料说到,可能是指没有名字这一点吧。匿名内部类格式就下面这个形式,只要满足这个应该都叫匿名内部类 new 父类构造器(参数列表)|实现接口() { //匿名内部类的类体部分 }
    2017-01-22 06:17:38
  • 提问者 瞳劫 回复 ShawnGao #3
    谢谢,能在详细一点跟我说嘛?在哪个地方加上interface接口什么的,十分感谢.
    2017-01-22 11:13:23
问题已解决,确定采纳
还有疑问,暂不采纳

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

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

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

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

帮助反馈 APP下载

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

公众号

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

在线咨询

领取优惠

免费试听

领取大纲

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