当前位置: 首页 > 编程笔记 >

Java中定义了几种类型的匿名内部类?

东方涛
2023-03-14
本文向大家介绍Java中定义了几种类型的匿名内部类?,包括了Java中定义了几种类型的匿名内部类?的使用技巧和注意事项,需要的朋友参考一下

一个匿名内部类声明一个内部类没有任何类名的。换句话说,一个无名的内部类称为匿名内部类。由于它没有名称,因此它不能具有构造函数, 因为我们知道构造函数名称与类名称相同。

我们可以定义一个匿名内部类,并一步一步使用new 运算符创建其对象。

语法

new(argument-list){
   //匿名类正文
}

Java匿名内部类的类型

  • 扩展类的匿名内部类

  • 实现接口的匿名内部类

  • 匿名内部类作为参数

扩展类的匿名内部类

在这里,新 关键字用于创建匿名内部类的对象,该对象具有父类类型引用。

示例

class Car {
   public void engineType() {
      System.out.println("Turbo Engine");
   }
}
public class AnonymousClassDemo {
   public static void main(String args[]) {
      Car c1 = new Car();
      c1.engineType();
      Car c2 = new Car() {
         @Override
         public void engineType() {
            System.out.println("V2 Engine");
         }
      };
      c2.engineType();
   }
}

输出结果

Turbo Engine
V2 Engine


实现接口的匿名内部类

在这里,新 关键字用于创建匿名内部类的对象,该对象具有接口类型引用。

示例

interface Software {
   public void develop();
}
public class AnonymousClassDemo1 {
   public static void main(String args[]) {
      Software s = new Software() {
         @Override
         public void develop() {
            System.out.println("Software Developed in Java");
         }
      };
      s.develop();
      System.out.println(s.getClass().getName());
   }
}

输出结果

Software Developed in Java
AnonymousClassDemo1$1


匿名内部类作为参数

我们可以使用匿名内部类作为参数,以便可以将其 传递给方法或构造函数。

示例

abstract class Engine {
   public abstract void engineType();
}
class Vehicle {
   public void transport(Engine e) {
      e.engineType();
   }
}
public class AnonymousInnerClassDemo2 {
   public static void main(String args[]) {
      Vehicle v = new Vehicle();
      v.transport(new Engine() {
         @Override
         public void engineType() {
            System.out.println("Turbo Engine");
         }
      });
   }
}

输出结果

Turbo Engine
 类似资料:
  • 问题内容: 我已经看到了几个与Java中类似的示例,希望有人可以解释发生了什么。似乎可以内联定义一个新类,这对我来说真的很奇怪。 第一行是预期的输出行,因为它只是toString。但是第二似乎函数可以内联重写。 为此有技术术语吗? 还是任何更深入的文档? 如果我有以下代码: 代码输出: 问题答案: 它是一个匿名内部类。您可以在Java文档内部类链接中找到有关它的更多信息。 编辑 我正在添加一个更好

  • 我有以下xsd文件: 以及以下bindings.xjb 我还有以下xml文件: 当我使用jaxb生成的类进行解组时: 我得到以下例外: java.lang.ClassCastExcema: test.ShiporderItem$ShiporderItemItem不能强制转换为测试。ShiporderItem 在JaxbTest.main(JaxbTest.java:16) 你能帮我找出我做错了什么

  • 本文向大家介绍Java匿名类,匿名内部类实例分析,包括了Java匿名类,匿名内部类实例分析的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了Java匿名类,匿名内部类。分享给大家供大家参考,具体如下: 内部类 匿名类  首发日期 :2018-03-25 内部类: 在一个类中定义另一个类,这样定义的类称为内部类。【包含内部类的类可以称为内部类的外部类】 如果想要通过一个类来使用另一个类,可以定

  • 问题内容: 我正在编写C#Wicket实现,以加深对C#和Wicket的理解。我们遇到的问题之一是Wicket大量使用匿名内部类,而C#没有匿名内部类。 因此,例如,在Wicket中,您可以这样定义一个链接: 由于Link是一个抽象类,因此它强制实现者实现onClick方法。 但是,在C#中,由于没有匿名内部类,因此无法做到这一点。另外,您可以使用如下事件: 当然,这样做有两个缺点。首先,可以有多

  • 在中定义额外的方法(不重写超类方法)时,代码编译良好,没有任何问题,但如果我试图调用额外的方法,它会抛出错误。那么,在使用扩展时,是否只有在子类中的方法才可能?如果是这样,谁能解释一下为什么? 下面是我的代码的样子 这就是我得到的错误

  • 问题内容: 请看下面的代码: 在上面的代码中,在方法ModifyList()中声明的匿名内部类的实例能够访问传递给该方法的参数。AFAIK Java为内部类创建一个单独的字节码文件。 谁能解释一下Java在字节码级别上如何处理这些局部变量绑定?我的意思是,Java如何精确跟踪对作为参数传递给该方法的对象的引用? 任何帮助将不胜感激! [抱歉我的英语不好! 如果您理解我的问题,请编辑这篇文章,并删除