作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我制作这两个类是为了利用匿名内部类的概念。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/
我是一名优秀的程序员,十分优秀!