JavaAPI显示了一个实例化接口的示例
我知道Java接口不能被实例化。但是我在查看JavaAPI中的匿名类解释时发现了一个示例,其中包括创建接口的对象。这怎么可能? 守则的一部分:JavaAPI显示了一个实例化接口的示例,java,interface,anonymous-function,anonymous-class,Java,Interface,Anonymous Function,Anonymous Class,我知道Java接口不能被实例化。但是我在查看JavaAPI中的匿名类解释时发现了一个示例,其中包括创建接口的对象。这怎么可能? 守则的一部分: public class HelloWorldAnonymousClasses { interface HelloWorld { public void greet(); public void greetSomeone(String someone); } public void sayHello() { class EnglishGr
public class HelloWorldAnonymousClasses {
interface HelloWorld {
public void greet();
public void greetSomeone(String someone);
}
public void sayHello() {
class EnglishGreeting implements HelloWorld {
}
HelloWorld englishGreeting = new EnglishGreeting(); //object 1
HelloWorld frenchGreeting = new HelloWorld() {
String name = "tout le monde"; public void greet() { greetSomeone("mundo");}
public void greetSomeone(String someone) {
name = someone; System.out.println("Hola, " + name);} }};
ObjectenglishGreeting
很好,因为对象类型是interfaceHelloWorld
,但引用指向Object typeenglishGreeting
- 现在的问题是关于对象
法语问候语
。既然它创建了
对象,并且HelloWorld
是一个接口,那么这怎么可能有效呢。如何实例化接口类型。我找不到支持此示例的解决方案。我们可以实例化内部接口吗HelloWorld
- 链接:
接口的匿名类的实例
如果您使用javac编译代码,您将看到编译器将为匿名类
生成类文件,如下所示
HelloWorld$1.class
现在,如果您使用javap
反编译生成的类文件,您将看到它实现了HelloWorld这是绝对允许的。
通过执行newhelloworld{/*abstracted methods here*/}
您不是在创建接口的实例,而是在实现接口本身的匿名类。
通过创建实现接口的单独类,可以实现相同的结果,例如:
public class HelloWorldImplementation implements HelloWorld {
/*abstracted methods here*/
}
也许这个例子对你有帮助
public interface IFoo
{
}
IFoo foo = new IFoo {
};
foo
指的是IFoo类型的空对象的内存。法语问候语
指的是匿名类型的对象。您可以在bin
文件夹(带有编译类)中看到这些类型。这是一个匿名内部类,因此它实际上是一个类而不是一个接口。与Java中的形式相同,接口无法实例化。您可以添加一点解释吗..可能发布一个答案会有用吗?…因为我在网上找不到与此相关的任何内容。new Helloworld()
为HellowWorld对象分配内存..对吗?你能补充一点详细的解释吗?.因为我在网上的任何地方都找不到它。@MathewsMathai new HellowWorld()只是一个普通对象,它分配内存。关于它没有什么特别的考虑HelloWorld
作为一个常规类…在这种情况下new HelloWorld()
意味着为HelloWorld()类型的对象分配内存,对吗???@MathewsMathai抱歉,但我不明白你的意思?这是不是意味着…这是匿名类实现接口的固定语法?如果HelloWorld
是一个常规类,那么这种语法是否意味着匿名类是扩展HelloWorld?@MathewsMathai你可以这样想。当我开始学习时,我一直在想,新的匿名类实现了一些接口。
@MathewsMathai匿名类实现了HelloWorld接口。@MathewsMathai类和接口的原理不一样。如果实例化一个常规类,则不涉及匿名类。另一方面,如果实例化一个抽象类(例如),则会有一个匿名类,因为其中涉及抽象。