[英]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.