java中的内部静态类

时间:2014-03-18 17:18:39

标签: java

public interface Bsuper {

    abstract class A {
        abstract void test1();

        void test2() {
            System.out.print("test2 ");
        }
    }
}

// second file
public class Bsub extends Bsuper.A {

    void test1() {
        System.out.print("test1 ");
    }
}

// third file
public class Bsubmain {

    public static void main(String args[]) {
        Bsub sub1 = new Bsub();
        Bsuper.A obj = new Bsub();
        sub1.test1();
        sub1.test2();
        obj.test1();
        obj.test2();
    }
}

它按预期生成输出test1 test2 test1 test2,但我的问题是在Bsuper类中,A类是静态的我们都知道,现在与它成为抽象类的抽象关键字,但是如何同时将抽象和静态应用于类。它是一个非常静态的类,或者是否有任何其他解释。请回答!!

2 个答案:

答案 0 :(得分:3)

  

如何同时将抽象和静态应用于类。

拥有static abstract课程是完全有效的。这与使用static abstract方法不同,后者没有意义,因为您无法覆盖此类方法,并且您还要使其abstract。但是对于static类,你当然可以extend,没有问题。使abstract仅限制您创建它的实例。

所以,即使这是有效的:

class Main {
    static abstract class Demo { }
    class ConcreteDemo extends Demo { }
}

在这种情况下,您无法实例化Demo,并确保您可以实例化ConcreteDemo

答案 1 :(得分:1)

请记住,static inner类使用的是 static 的不同概念。

在这种情况下,它意味着内部类无法访问外部类的实例变量

public class Test {
    long n = 0;

    static class A {
        // Not allowed.
        long x = n;
    }

    class B {
        // Allowed.
        long x = n;
    }

}

制作abstract并不会改变任何内容。

    abstract static class C {
        // Not allowed.
        long x = n;
    }

    abstract class D {
        // Allowed.
        long x = n;
    }