ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

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

2019-10-13 01:05:06  阅读:176  来源: 互联网

标签:nested-class 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

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有