Java 匿名类(匿名内部类)

发布于:2023-01-04 ⋅ 阅读:(342) ⋅ 点赞:(0)

1. 初识 匿名类

标准说法: 内部类包括:成员类、局部类、匿名类(匿名内部类)。

匿名类概念:

  • 匿名类可以使代码更加简洁 。
  • 可以定义一个类的同时对其进行实例化
  • 它与局部类很相似,不同的是它没有类名,如果某个局部类只需要使用一次,就可以使用匿名类代替局部类
  • 匿名类是表达式,而非常规的类

匿名类的使用场景:

  • 一个局部类只需要使用一次的时候
  • 由于匿名类没有类名,那么除了定义它的地方,其他地方无法调用,所以匿名类也可以叫匿名内部类

局部类的格式是:

  1. 创建局部类并且实现接口:class EnglishGreeting implements HelloWorld {...}
  2. 创建局部类的实例化对象并用接口类型接收:HelloWorld englishGreeting = new EnglishGreeting();
  3. 调用实例化对象的方法

匿名类的格式是:

  1. 创建匿名类实现接口同时对其进行实例化:HelloWorld frenchGreeting = new HelloWorld() {...}
  2. 调用实例化对象的方法

【区别】

  1. 局部类EnglishGreeting实现HelloWorld接口,有自己的类名:EnglishGreeting,定义完成后需要再对其实例化对象:englishGreeting才能可以使用方法
  2. 匿名类在定义时就已经实例化成对象:frenchGreeting,定义完了就可以直接使用方法
  3. 匿名类是一个表达式,因此在定义的最后用分号结束

3. 匿名内部类的语法

3.1 匿名类实现接口

  1. main方法创建匿名类实现TomInterface接口并实例化:new TomInterface{...}
  2. 调用匿名类对象的setName方法,将杰瑞赋值给匿名类的成员变量name,并返回当前实例this给接口变量tif
  3. main方法调用匿名类对象的方法tif.getName(),而此时的匿名类的成员变量name的值已经被替换成杰瑞,所以最后输出杰瑞而不是汤姆

3.2 匿名类继承父类 (匿名子类)

匿名类继承父类,调用父类构造,重写父类方

  1. 创建父类对象并调用getName方法,这个不用细说
  2. 创建匿名类继承父类并实例化对象:pc,本次匿名类调用的是父类的带参构造,将参数赋值给了父类的name
  3. 调用匿名类重写的getName方法,得到新的name
本文含有隐藏内容,请 开通VIP 后查看

网站公告

今日签到

点亮在社区的每一天
去签到