java - 实例化一个抽象类或接口(interface),可能吗?

标签 java

这很好用。

package abstracttest;

public abstract class AbstractClass implements NewInter {

    public abstract void doStuff();

    public void doStuff2() {
        System.out.println("in doStuff2");
    }

    /*
     * public static void main(String a[]) { AbstractClass ab = new
     * AbstractClass() {
     * 
     * @Override public void doStuff() { // TODO Auto-generated method stub
     * System.out.println(" doStuff "); }
     * 
     * @Override public void doInter() { // TODO Auto-generated method stub
     * 
     * } };
     * 
     * ab.doStuff2(); ab.doStuff();
     * 
     * NewInter ni = new NewInter() {
     * 
     * @Override public void doInter() { // TODO Auto-generated method stub
     * System.out.println("do Inter"); }
     * 
     * }; ni.doInter();
     * 
     * AbstractClass ab1 = new AbstractClass(); }
     */

}

interface NewInter {

    String con = "Hell";

    void doInter();
}

class Impl extends AbstractClass {

    @Override
    public void doInter() {
        // TODO Auto-generated method stub

    }

    @Override
    public void doStuff() {
        // TODO Auto-generated method stub

    }

    public static void main(String[] s) {
        AbstractClass ab = new AbstractClass() {

            @Override
            public void doInter() { // TODO Auto-generated method stub
                System.out.println("impl doInter");
            }

            @Override
            public void doStuff() { // TODO Auto-generated method stub
                System.out.println("impl doStuff");
            }

        };
        ab.doInter();
        ab.doStuff();

        NewInter ni1 = new NewInter() {

            @Override
            public void doInter() {
                // TODO Auto-generated method stub

            }
        };
        ni1.doInter();
    }

}

我能够从抽象类的 main() 实例化抽象类接口(interface)类Impl
这怎么可能?
我本来期待一个异常,但调用工作正常。
有人可以解释一下这些现象吗?我很困惑。

A Java abstract class also cannot be instantiated, but can be invoked if a main() exists.

我在 blog 中读到了这篇文章。这是什么意思?

还有其他方法可以调用抽象类的构造函数吗?有的话请告诉我。

最佳答案

不,您没有实例化它们。您仅创建了实现接口(interface)或扩展抽象类的匿名类。这些匿名类类型的对象实际上被实例化。

关于java - 实例化一个抽象类或接口(interface),可能吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14976545/

相关文章:

java - 使用@beforeeach设置一次性代码进行测试

java - 如何从 ArrayList<String[]> 获取值

java - 从同步方法调用非同步方法

java - 无法使用 HTTP 客户端传输图像

java - 使用 'javah' 使用 JNI 生成头文件

java - 如何检索 RDF 属性

java - JTextArea吞并JButton Action 监听器Java

java - Tomcat:Java 静态变量作用域、应用程序或 session 范围?

java - Hibernate 搜索查找短语的部分匹配

java - eclipse 中的 Tomcat WTP : route all requests to same Servlet