匿名内部类在开发中的使用
如果一个方法要的形参是接口,其实他要的是该接口的实现类的对象
不采用内部类时,想要实现操作类中方法: 不仅需要定义操作类和接口,还要定义重写接口的实现类
接口:
package com.oop.demo10;
public interface Jumping {
void jump();
}
继承接口的实现类:
package com.oop.demo10;
/*
实现类
*/
public class Cat implements Jumping{//实现类继承接口,重写方法
@Override
public void jump() {
System.out.println("猫可以跳高了");
}
}
操作类
package com.oop.demo10;
/*
操作类
*/
public class JumpingOperator {
public void method(Jumping j){//一个方法的形参要求的是一个接口,那么它实际要的是该接口的实现类对象
j.jump();
}
}
主函数测试:
package com.oop.demo10;
/*
* 测试类
*/
public class JumpingTest {
public static void main(String[] args) {
//创建接口操作类的对象,调用method方法
JumpingOperator jo = new JumpingOperator();
Jumping j=new Cat();//定义一个实现类的对象
jo.method(j);//实参传的是实现类的对象
System.out.println("----------------------------");
}
}
**采用内部类,实现操作类中方法:**接口、操作类不变的前提下,不用再重新定义一个接口的实现类
主函数如今为:
package com.oop.demo10;
/*
* 测试类
*/
public class JumpingTest {
public static void main(String[] args) {
//创建接口操作类的对象,调用method方法
JumpingOperator jo = new JumpingOperator();
//想要调用method方法,需要一个接口,也就是需要一个实现类对象
//匿名内部类本质是实现了接口的匿名对象
jo.method(new Jumping() {//new 了jumping对象之后直接一回车即可出现重写方法
@Override
public void jump() {
System.out.println("猫可以跳高了");
}
});
jo.method(new Jumping() {
@Override
public void jump() {
System.out.println("狗可以跳高了");
}
});//依然是调用了操作类中的method方法,但是里面的实参从接口的实现类对象变成了内部类对象
}
}
这样不管写多少个“可以跳高了”,都可以完成,而不用定义多个实现类