Java基础之匿名内部类
Posted Ocean:)
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java基础之匿名内部类相关的知识,希望对你有一定的参考价值。
匿名内部类
Anonymous Inner Type
几种方法的比较
package cn.ocean888_b;
import java.security.PublicKey;
/*
* 匿名内部类
*/
interface A {
void test();
}
/**
* 非abstract修饰TypeA遵从接口A,要求强制实现接口中的test方法
*/
class TypeA implements A {
@Override
public void test() {
System.out.println("普通接口");
}
}
public class Demo1 {
public static void main(String[] args) {
// 一般接口实现
TypeA typeA = new TypeA();
typeA.test();
/*
* A接口的引用a,new调用A接口的构造方法,注意:并不是创建A接口对象
* 大括号{}里面的内容和一个普通类遵从接口A的效果是一模一样的
* 大括号里面的内容可以认为是类的 本体,但是大括号之前没有类名,这就是匿名内部类
*
* new 关键字在内存堆区申请了空间,创建了一个隐含的遵从接口A的匿名内部类对象
* 并且把该对象的空间首地址,赋值给了接口A的引用数据类型变量
* 接口的引用遵从接口的类对象,这就是多态
*/
A a = new A() {
@Override
public void test() {
System.out.println("匿名内部类的对象赋值给接口的引用");
}
}; // 一定注意这里有分号
a.test();
// 匿名内部类的匿名对象直接调用方法
new A() {
@Override
public void test() {
System.out.println("匿名内部类的匿名对象直接调用方法");
}
}.test();
// 匿名内部类的匿名对象直接调用方法的参数,推荐使用此方式
testInterface(new A() {
@Override
public void test() {
System.out.println("匿名内部类的匿名对象直接调用方法的参数");
}
});
}
/**
* 需要接口A的实现类对象作为方法的参数
*/
public static void testInterface(A a) {
a.test();
}
}
之前项目的排序就可以用匿名内部类的方法去实现
@Test
public void testSortAge() {
StudentManager studentManager = new StudentManager();
studentManager.add(new Student("ocea1n", 28, '男', 99, 98, 97));
studentManager.add(new Student("ocea1n", 38, '男', 99, 98, 97));
studentManager.add(new Student("ocea1n", 48, '男', 99, 98, 97));
studentManager.add(new Student("ocea1n", 58, '男', 99, 98, 97));
studentManager.add(new Student("ocea1n", 68, '男', 99, 98, 97));
studentManager.add(new Student("ocean", 68, '男', 99, 98, 97));
studentManager.selectSortUsingComparator(new MyComparator() {
@Override
public boolean compare(Student stu1, Student stu2) {
return stu1.getAge() > stu2.getAge();
}
});
去代替原来的impl下的文件
如:AgeAscCompare.java文件
package cn.system.student.ocean888.compare.impl;
import cn.system.student.ocean888.compare.MyComparator;
import cn.system.student.ocean888.entity.Student;
public class AgeAscCompare implements MyComparator{
@Override
public boolean compare(Student stu1, Student stu2) {
return stu1.getAge() < stu1.getAge();
}
}
以上是关于Java基础之匿名内部类的主要内容,如果未能解决你的问题,请参考以下文章