java中与接口有关的匿名类详解

  假设Computable是一个接口,那么,Java允许直接用接口名和一个类体创建一个匿名对象,此类体被认为是实现了Computable接口的类去掉类声明后的类体,称作匿名类。

new Computable() {

  实现接口的匿名类的类体

} ;

  如果某个方法的参数是接口类型,那么可以使用接口名和类体组合创建一个匿名对象传递给方法的参数,对于

void f(ComPutable x) 其中的参数x是接口,那么在调用f时,可以向f的参数x传递一个匿名对象,例如:

f(new ComPutable() {

  实现接口的匿名类的类体

})

  新建一个Ball

Ball.java

public interface Ball { //接口

void getColor();

}

  新建RedBall

RedBall .java

public class RedBall implements Ball{ //实现这个接口和抽象方法

@Override

public void getColor() {

System.out.println("red");

}

}

  新建BlueBall

BlueBall.java

public class BlueBall implements Ball{ //实现这个接口和抽象方法

@Override

public void getColor() {

System.out.println("blue");

}

}

Test.java

public class Test {

void testPerson(Person person) {

person.speak();

}

void testCar(Car car){

car.sound();

}

void testBall(Ball ball){

ball.getColor();

}

}

  在主类中如何来调用它呢?

Demo29.java

public class Demo29 {

public static void main(String[] args) {

Ball ball = new RedBall();

Test test = new Test();

test.testBall(ball);

}

}

  运行结果


修改代码

Demo29.java

public class Demo29 {

public static void main(String[] args) {

Ball ball = new RedBall();

Test test = new Test();

test.testBall(ball);

ball = new BlueBall();

test.testBall(ball); //再把我们的ball传进来

}

}

  运行结果,先打印red,再打印blue这就是之前的接口与多态


这里将接口和多态和我们的匿名类结合起来

  修改代码

Demo29.java

public class Demo29 {

public static void main(String[] args) {

Ball ball = new RedBall();

Test test = new Test();

test.testBall(ball);

test.testBall(ball);

test.testBall(new RedBall());

test.testBall(new Ball() { //这里重写的是一个接口,一个接口必须把它当中的方法做一个实现

@Override

public void getColor() {

System.out.println("yellow");

}

});

}

}

  这里的匿名接口子类打印的是yellow



 

原文链接:http://www.maiziedu.com/wiki/java/anonymous/


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值