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类是静态的我们都知道,现在与它成为抽象类的抽象关键字,但是如何同时将抽象和静态应用于类。它是一个非常静态的类,或者是否有任何其他解释。请回答!!
答案 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;
}