这似乎是从接口创建一个对象;它是如何运作的?

发布于 2024-09-27 21:02:43 字数 196 浏览 3 评论 0原文

interface Int {
   public void show();
}
Int t1 = new Int() {
   public void show() {
      System.out.println("message");
}

to.show();
interface Int {
   public void show();
}
Int t1 = new Int() {
   public void show() {
      System.out.println("message");
}

to.show();

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

心舞飞扬 2024-10-04 21:02:43

您正在定义一个实现 Int 接口的匿名类,并立即创建一个 thatAnonymousClassYouJustMade 类型的对象。

You're defining an anonymous class that implements the interface Int, and immediately creating an object of type thatAnonymousClassYouJustMade.

つ可否回来 2024-10-04 21:02:43

此表示法是

Int t1 = new MyIntClass();

// Plus this class declaration added to class Test
private static class MyIntClass implements Int
    public void show() {
        System.out.println("message");
    }
}

So in the end 你将创建一个具体类的实例,其行为是你内联定义的。

您也可以通过抽象类来实现这一点,方法是为所有内联抽象方法提供实现。

This notation is shorthand for

Int t1 = new MyIntClass();

// Plus this class declaration added to class Test
private static class MyIntClass implements Int
    public void show() {
        System.out.println("message");
    }
}

So in the end you're creating an instance of a concrete class, whose behavior you defined inline.

You can do this with abstract classes too, by providing implementations for all the abstract methods inline.

格子衫的從容 2024-10-04 21:02:43

这种匿名内部类的特殊语法的作用是创建一个名为 Test$1 的类。您可以在 Test 类旁边的类文件夹中找到该类文件,如果您打印了 t1.getClass().getName() 您也可以看到该文件。

What this special syntax for anonymous inner classes does under the hood is create a class called Test$1. You can find that class file in your class folder next to the Test class, and if you printed t1.getClass().getName() you could also see that.

深巷少女 2024-10-04 21:02:43

我认为你的对象与界面无关。如果您注释掉整个界面,您仍然会得到相同的输出。它只是创建的匿名类。我认为,除非您使用类“实现”,否则您无法实现该接口。但我不知道在你的情况下如何不会发生命名冲突。

i think your object has nothing to do with the interface. If you comment out the whole interface, still you will get the same output. Its just anonymous class created. I think, unless you use the class "implements" you cant implement the interface. But i dunno how naming collision doesn't happen in your case.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文