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 становится абстрактным, но как можно иметь как абстрактные, так и статические применяется к классу в то же самое время. Я класс А действительно статичный также или есть какие-либо другие объяснения для него. Пожалуйста, ответьте!
Помните, что static
inner
класс использует другую концепцию статического.
В этом случае это означает, что внутренний класс не имеет доступа к переменным экземпляра внешнего класса.
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;
}
как можно одновременно применять как абстрактный, так и статический класс.
Совершенно верно иметь static abstract
класс. Это отличается от static abstract
метода, который не имеет смысла, поскольку вы не можете переопределить такие методы, и вы также делаете его abstract
. Но со static
классом вы можете, конечно, extend
его, никаких проблем. Создание abstract
просто ограничивает вас созданием его экземпляра.
Таким образом, даже это справедливо:
class Main {
static abstract class Demo { }
class ConcreteDemo extends Demo { }
}
В этом случае вы не можете создать экземпляр Demo
, и вы можете создать экземпляр ConcreteDemo
.