抽象类和匿名类

发布于 2024-10-20 03:49:19 字数 693 浏览 4 评论 0原文

abstract class Two {
    Two() {
        System.out.println("Two()");
    }
    Two(String s) {
        System.out.println("Two(String");
    }
    abstract int  display();
}
class One {
    public Two two(String s) {
        return new Two() {          
            public int display() {
                System.out.println("display()");
                return 1;
            }
        };
    }
}
class Ajay {
    public static void main(String ...strings ){
        One one=new One();
        Two two=one.two("ajay");
        System.out.println(two.display());
    }
}

我们无法实例化抽象类,那么为什么函数 Two Two(String s) 能够创建抽象类 Two 的实例???

abstract class Two {
    Two() {
        System.out.println("Two()");
    }
    Two(String s) {
        System.out.println("Two(String");
    }
    abstract int  display();
}
class One {
    public Two two(String s) {
        return new Two() {          
            public int display() {
                System.out.println("display()");
                return 1;
            }
        };
    }
}
class Ajay {
    public static void main(String ...strings ){
        One one=new One();
        Two two=one.two("ajay");
        System.out.println(two.display());
    }
}

we cannot instantiate an abstract class then why is the function Two two(String s) able to create an instance of abstract class Two ????

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

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

发布评论

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

评论(2

十级心震 2024-10-27 03:49:19

它不会创建抽象 Two 的实例。它创建一个具体的匿名类,该类扩展 Two 并实例化它。

它几乎相当于使用这样的命名内部类:

class One {
    public Two two(String s) {
        return new MyTwo();
    }

    class MyTwo extends Two {
        public int display() {
            System.out.println("display()");
            return 1;
        }
    }
}

It does not create an instance of abstract Two. It creates a concrete, anonymous class that extends Two and instantiates it.

It's almost equivalent to using a named inner class like this:

class One {
    public Two two(String s) {
        return new MyTwo();
    }

    class MyTwo extends Two {
        public int display() {
            System.out.println("display()");
            return 1;
        }
    }
}
穿透光 2024-10-27 03:49:19

因为它实现了缺少的函数display()。它返回 Two 的匿名子类。如果您查看编译的文件,您可以看到这一点。您将在那里有一个 One$1.class,它扩展了 Two.class!

Because it implements the missing function display(). It returns an anonymous subclass of Two. You can see this if you look at the compiled files. You will have a One$1.class there, which extends Two.class!

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