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