编程语言
首页 > 编程语言> > java-如何使用匿名内部类?

java-如何使用匿名内部类?

作者:互联网

我使这两个类都利用了匿名内部类的概念.
1类具有静态内部类.第2类使用它.但是我不明白如何调用内部类的方法.请帮帮我.

1类

public class outerclass {
  outerclass() {
    System.out.println("Constructor of new class");
  }

  public void showthis(String str) {
    System.out.println(str);
  }

  static class insideclass {
    insideclass() {
      System.out.println("This is inside class constructor");
    }

    public void nowshowthis(String str) {
      System.out.println(str);
    }
  }
}

2级

public class helloworld {
  public static void main(String args[]) {
    //this is an object of the outer class
    outerclass example=new outerclass();
    //How do i make an anonymous inner class and call the method "nowshowthis()"
  }
}

解决方法:

匿名内部类是在另一个类的方法的主体内创建和定义的.本质上,您是根据抽象定义动态创建具体的类.到目前为止,您的InnerClass类实际上拥有的只是一个普通的内部类,意味着非匿名的.

如果要尝试使用匿名内部类,我想到的最简单的方法是将InnerClass更改为接口,如下所示:

public interface InnerClass{
    public void doSomething();
}

因此,目前,InnerClass确实蹲下;在定义之前,它没有任何意义.接下来,您将需要更改OuterClass的工作方式.像这样更改showThis()函数:

public showThis(InnerClass innerObj){
    innerObj.doSomething();
}

现在,我们有您的外部类要求内部类实例做某事,但是我们仍然没有定义我们想要它做什么.这就是魔术发生的地方-在您的main方法中,您将定义内部类实例的实际外观:

public static void main (String[] args){
    OuterClass outer = new OuterClass();

    // This is the key part: Here you are creating a new instance of inner class 
    // AND defining its body. If you are using Eclipse, and only write the 
    // new InnerClass() part, you'll notice that the IDE complains that you need 
    // to implement the doSomething() method, which you will do as though you
    // were creating a plain 'ol class definition
    outer.showThis(new InnerClass(){ 
        public void doSomething(){
            System.out.println("This is the inner anonymous class speaking!");
        }
    });
}

实际上,我没有过多使用匿名内部类,但是了解它们很有用.在进行GUI编程时,我经常使用它们来定义GUI控制事件(例如按钮单击)的侦听器.

另外,正如其他人所提到的,请记住,Java标准将类名的第一个字母大写,在此已完成.您将要遵循该标准,因为它使其他人更轻松地阅读您的代码,并且一目了然,您可以很容易地分辨出何时查看类以及何时查看对象.

无论如何,希望能有所帮助.

标签:nested-class,java
来源: https://codeday.me/bug/20191013/1904399.html