Java中的匿名内部类是内部类或嵌套类。内部类是存在于外部类内部的类。所以匿名内部类就是没有名字的内部类。它要么是类的子类,要么是接口的实现。因此,如果我们必须重写一个类或接口方法,我们可以使用匿名内部类。对于匿名内部类,花括号后跟分号。
开始您的免费软件开发课程
网络开发、编程语言、软件测试及其他
创建匿名内部类有两种方法。
语法:
下面是语法,其中类可以是抽象类或具体类或接口。
class t = new class() { // class variables and methods members public void class_method() { /* some code of the class_method */ } };
下面给出了提到的示例:
我们创建一个接口和一个实现该接口的简单类的示例。
代码:
package p1; interface Emp { int eid = 2101; void geteid(); } // Implclass implement an Emp Interface and provide the defination for geteid() method class ImplClass implements Emp { @Override public void geteid() { // display the eid System.out.print("Employee id is "+eid); } } class Demo { public static void main( String[] arg ) { // create object of Implclass which implements Emp interface ImplClass ob=new ImplClass(); // call geteid() method which implemented by Implclass ob.geteid(); } }
输出:
如上面的代码,使用 geteid() 方法创建了一个接口 Emp,并且 eid=2101。 ImplClass 实现 Emp 接口并提供 geteid() 方法的定义。不需要单独写一个类ImplClass;相反,它可以用作匿名内部类。
这里我们重写上面的 java 代码来查看内部类的工作情况。应用程序中的其他类可以访问 ImplClass 类。但是,应用程序中的其他类不需要 ImplClass 类的功能。因此我们不需要定义外部类。此外,此类的实例仅使用一次。因此,借助匿名内部类,可以实现ImplClass类的功能。在下面的例子中,我们通过实现Empinterfece直接创建了该类的对象。
代码:
package p1; interface Emp { int eid = 2101; void geteid(); } class Demo { public static void main( String[] arg ) { // Implclass is hidden inner class implement an Emp Interface // Implclass class name is not created but an object is creating below Emp ob = new Emp() { @Override public void geteid() { // display the eid System.out.print("Employee id is "+eid); } }; // call geteid() method which implemented by Implclass ob.geteid(); } }
输出:
如上面的代码,并没有创建Emp的对象;隐式地创建了一个 ImplClass(可能不是同名)类的对象。请注意,内部类没有名称,因此编译器决定一个名称并创建它,实现 Emp 接口。
用于创建扩展类的匿名内部类的 Java 代码。
代码:
package p1; class Emp { void dispMesg() { System.out.println("This message is from main class"); } } class Demo { public static void main( String[] arg ) { // Anonymous hidden inner class extends an Emp class // Anonymous class name is not created but an object is creating below Emp ob = new Emp() { @Override // override dispMesg() method in child Anonymous inner class public void dispMesg() { System.out.print("This message is from child class"); } }; // call geteid() method which implemented by Implclass ob.dispMesg(); } }
输出:
用于创建扩展抽象类的匿名内部类的 Java 代码。
代码:
package p1; abstract class Emp { void dispMesg() { System.out.println("This message is from main class"); } abstract void abstrct_method(); } class Demo { public static void main( String[] arg ) { // Anonymous hidden inner class extends an Emp abstract class // Anonymous class name is not created but an object is creating below Emp ob = new Emp() { @Override public void dispMesg() { System.out.println("This message is from child class"); } @Override void abstrct_method() { System.out.println("Abstract Method"); } }; ob.dispMesg(); ob.abstrct_method(); } }
输出:
用于创建匿名内部类的 Java 代码,该类定义内部构造函数或方法参数,我们将在其中使用预定义的 Thread 类和可运行接口来创建和运行线程。
代码:
package p1; class Demo { public static void main( String[] arg ) { // Anonymous hidden inner class extends an Emp class // Anonymous class define constructor argument Thread obt = new Thread(new Runnable() { @Override public void run() { System.out.println("Runing child Thread."); } }); System.out.println("Runing main Thread."); obt.start(); System.out.println("Runing main Thread."); } }
输出:
匿名内部类是没有类名的内部类。创建匿名内部类有多种方法,例如扩展具体类、扩展抽象类和实现接口。
以上是Java中的匿名内部类的详细内容。更多信息请关注PHP中文网其他相关文章!