匿名内部类:可以让不能创建对象的 接口和抽象父类 创建对象 (这里的对象不是真的对象),然后重写方法,这样可以实现不被类继承或实现,就可以调用该方法(原来被继承重写的方法);
对象回调:(把创建的对象作为传参,进行go()方法,然后该对象作为方法的形参调用该对象的方法new Swimming)
还有一种情况就是:匿名内部类作为方法的入参形式 例如 : go(new Swimming()_
这里相当于将前面的go(s1) 直接替换成new Swimming()
package com.itheima.d8_innerclass_anonymous;
/**
* 目标:掌握匿名内部类的使用形式(语法)
*/
public class Test2 {
public static void main(String[] args) {
// // Swimming接口类相当于 父类
// Swimming s = new Student(); // 这是一种多态的写法
// go(s); // 多态 送的是Student类的对象 不过可以用自己的接口类(父类)接收
//这里可以用匿名类来写
Swimming s = new Swimming() { // 接口不能创建对象,这是定义的匿名内部类
@Override
public void swim() {
System.out.println("学生游泳");
}
};
go(s);
Swimming s1 = new Swimming() {
@Override
public void swim() {
System.out.println("老师过来比赛");
}
};
go(s1);
System.out.println("-------------------");
/**
* 还有一种情况就是:匿名内部类作为方法的入参形式 例如 : go(new Swimming()_
*/
go(new Swimming() { // 这里相当于将前面的go(s1) 直接替换成new Swimming() 前提Swimming s1 = new Swimming
@Override
public void swim() {
System.out.println("运动员跑的快");
}
});
}
/**
* 学生 老师 运动员可以一起参加游泳比赛
*/
public static void go(Swimming s){
// 该方法接收的是接口类对象(接口充当一种父类,所有子类都可以进来(用多态)
System.out.println("开始:");
s.swim(); // 调用他的游泳功能
System.out.println("结束。。。。");
}
}
//class Student implements Swimming{ // 创建Student实现类,实现接口
//
// @Override
// public void swim() {
// System.out.println("学生快乐的自由游泳");
// }
//}
// 创建一个接口实现某种功能
interface Swimming{
void swim(); // 默认抽象方法
}