抽象类中的静态类

时间:2012-07-10 17:33:56

标签: java static abstract

abstract class MyClass{

    static class StaticClass{
        public void showAdd(){
            System.out.println(" show add");
        }
    }
}

public class SampleClass extends MyClass{

    public static void main(String[] args){
         MyClass myClass = new SampleClass();
         MyClass.StaticClass staticClass = new MyClass.StaticClass();
         staticClass.showAdd();
    }
}

输出是否符合预期,但我们如何用抽象类写 new

5 个答案:

答案 0 :(得分:4)

您没有对抽象类执行new,而是对此抽象类中存在的内部类执行操作。在这种情况下,抽象类充当命名空间。

答案 1 :(得分:1)

您无法实例化抽象类。你的例子“有效”,因为你并没有真正实例化一个抽象类。

MyClass myClass = new SampleClass();

SampleClass是一个子类,是MyClass类的一个实现,因此它不是抽象的。所以这条线只是按照它应该的方式工作。尝试将new SampleClass()替换为new MyClass(),您将收到编译错误。

MyClass.StaticClass staticClass = new MyClass.StaticClass();

在这种情况下是相同的:

StaticClass staticClass = new StaticClass();

只是在抽象类中声明的内部类的实例化。由于这个内部类不是抽象的,因此可以实例化它。

答案 2 :(得分:0)

您无法为抽象类创建实例(除非您使用反射)。所以,如果你做new MyClass(),那么只有编译时错误。否则它工作正常,这是你的例子。

您不是使用new MyClass.StaticClass();

为静态类创建实例

抽象类是未完全实现的类(某些事实留给子类)。阅读此documentationhow inner classes work

静态内部类类似于类的静态变量。

答案 3 :(得分:0)

试试这个......

1。外类非常占有内部类(无论是静态还是非静态)。

2. 因此,要访问内部类(静态或非静态),需要使用外部类。

<强>例如

Outer.Inner i = new Outer.Inner(); 

在上面的例子中,我 NOT启动外部类,而且在你的情况下是它的抽象,所以那里 毫无疑问它被初始化,但它的内部静态类,也被称为顶级类被初始化。

答案 4 :(得分:-1)

无法实例化抽象类!这是Java规则。