首页 >Java >java教程 >Java中的匿名内部类

Java中的匿名内部类

WBOY
WBOY原创
2024-08-30 15:58:22495浏览

Java中的匿名内部类是内部类或嵌套类。内部类是存在于外部类内部的类。所以匿名内部类就是没有名字的内部类。它要么是类的子类,要么是接口的实现。因此,如果我们必须重写一个类或接口方法,我们可以使用匿名内部类。对于匿名内部类,花括号后跟分号。

开始您的免费软件开发课程

网络开发、编程语言、软件测试及其他

创建匿名内部类有两种方法。

  • 班级
  • 界面

语法:

下面是语法,其中类可以是抽象类或具体类或接口。

class t = new class()
{
// class variables and methods members
public void class_method()
{
/* some code of the class_method */
}
};

Java 中匿名内部类的示例

下面给出了提到的示例:

示例#1

我们创建一个接口和一个实现该接口的简单类的示例。

代码:

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

输出:

Java中的匿名内部类

如上面的代码,使用 geteid() 方法创建了一个接口 Emp,并且 eid=2101。 ImplClass 实现 Emp 接口并提供 geteid() 方法的定义。不需要单独写一个类ImplClass;相反,它可以用作匿名内部类。

示例#2

这里我们重写上面的 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();      
    } 
}

输出:

Java中的匿名内部类

如上面的代码,并没有创建Emp的对象;隐式地创建了一个 ImplClass(可能不是同名)类的对象。请注意,内部类没有名称,因此编译器决定一个名称并创建它,实现 Emp 接口。

示例 #3

用于创建扩展类的匿名内部类的 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中的匿名内部类

示例#4

用于创建扩展抽象类的匿名内部类的 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中的匿名内部类

示例#5

用于创建匿名内部类的 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中的匿名内部类

结论

匿名内部类是没有类名的内部类。创建匿名内部类有多种方法,例如扩展具体类、扩展抽象类和实现接口。

以上是Java中的匿名内部类的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
上一篇:Java Predicate下一篇:Counting sort in java