1、匿名对象
实例化一个对象的语句一般是类似下面的代码:
Person person = new Person();
其中Person是类的名称,person是实例化对象的名称,new运算符为对象分配存储空间,并返回对象的引用赋值给person。
假如在A类内部定义了一个tell()方法,tell()方法需要传入Person对象,该方法的声明如下:
tell(Person person);
调用A类的tell()方法时,传递person对象有两种方法。
第一种方法:
Person person = new Person();
tell(person);
第二种方法:
tell(new Person());
第二种方法的new Person()创建的对象就是一个匿名对象,这个对象没有具体的名称,并没有赋值给一个具体的变量。
2、匿名类
匿名类是指没有类名的内部类,匿名类可以继承一个给定的类,或者实现一个给定的接口。使用new运算符来创建匿名类。创建匿名类的语法如下:
new 类名称/接口名称()
{
//类的主体
};new运算符后面的“类名称/接口名称”可以是新定义类的名称、也可以是已有类的名称、也可以是要实现的接口名称。如果是新定义类的名称,new运算符会创建一个新的类并返回该类的对象引用;如果是已有类的名称,new运算符会创建一个已有类的子类;如果是接口名称,new运算符会创建一个实现该接口的类。
案例1:建立一个InfoEnter接口(学生信息录入接口),接口提供学生信息录入方法enter()。然后建立StudentManager类(学生信息管理类),在StudentManager类应用匿名类实现InfoEnter接口。
在PCoreUnit3项目student包内新建InfoEnter接口。代码如下:
package student;
/**
* @ClassName: InfoEnter
* @Description: 包与类的高级特性(匿名对象和匿名类)案例
* @author 编程训练营
* @date
*
*/
public interface InfoEnter {
// 学生信息录入接口
public void enter();
}InfoEnter接口提供了enter()方法,用于学生信息的录入。
在PCoreUnit3项目student包内新建StudentManager类,在StudentManager类应用匿名类实现InfoEnter接口。代码如下:
package student;
/**
* @ClassName: StudentManager
* @Description: 包与类的高级特性(匿名对象和匿名类)案例
* @author 编程训练营
* @date
*
*/
public class StudentManager {
// 实现InfoEnter接口
public InfoEnter infoenter = new InfoEnter() {
@Override
public void enter() {
System.out.println("正在输入学生信息…………");
}
};
}在StudentManager类内部使用new运算符创建了一个匿名类,该匿名类实现了InfoEnter接口,匿名类的对象引用赋值给InfoEnter类型的成员变量infoenter。
在PCoreUnit3项目student包内新建StudentManagerTest类,测试StudentManager类。代码如下:
package student;
/**
* @ClassName: StudentManagerTest
* @Description: 包与类的高级特性(匿名对象和匿名类)案例
* @author 编程训练营
* @date
*
*/
public class StudentManagerTest {
/**
* @Title: main
* @Description:Java程序入口main方法
* @param @param args 参数
* @return void 返回类型
* @throws
*/
public static void main(String[] args) {
// 实例化StudentManager对象
StudentManager manager = new StudentManager();
// 调用接口的enter()方法
manager.infoenter.enter();
}
}程序执行结果如下图所示:
