Logo

郎哥编程

匿名对象和匿名类

2019-12-24 225

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();
    }
 
}

程序执行结果如下图所示:        

image.png

 

代码在线纠错(通义千问 qwen-max)

支持粘贴多个代码文件,提交后由阿里云通义千问自动分析代码漏洞、语法错误、逻辑问题并给出修改建议。
您已解锁 AI 代码纠错功能,可正常使用!

评论区

登录 后发表评论
暂无评论