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

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

//测试类
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回答

当接口定义为:

public interface Ball {
  public void play();
}

BallTest定义为:

public class BallTest {
   public void playBall(Ball ball) {
     ball.play();
   }
}

可以在main方法中:

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 接口

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下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

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