gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 10:04:51 25 4
gpt4 key购买 nike

我制作这两个类是为了利用匿名内部类的概念。Class 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 更改为一个接口(interface),如下所示:

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 标准将类名的第一个字母大写,我在这里就是这么做的。您将希望遵循该标准,因为它使其他人更容易阅读您的代码,而且您一眼就能很容易地分辨出您是在查看类,还是在查看对象。

无论如何,希望对您有所帮助。

关于java - 如何使用匿名内部类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12058104/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com