繁体   English   中英

Java中的内部静态类

[英]Inner static classes in 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是静态的,我们都知道,现在有了abstract关键字,它就变成了抽象类,但是怎么可能同时具有abstract和static同时应用于课堂。A课堂是否也确实是静态的,或者是否有其他解释。请回答!

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

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

因此,即使这是有效的:

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

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

请记住, 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;
    }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM