[英]Static Class in Abstract Class
abstract class MyClass{
static class StaticClass{
public void showAdd(){
System.out.println(" show add");
}
}
}
public class SampleClass extends MyClass{
public static void main(String[] args){
MyClass myClass = new SampleClass();
MyClass.StaticClass staticClass = new MyClass.StaticClass();
staticClass.showAdd();
}
}
输出符合预期,但是我们如何用抽象类编写新的?
您不是对抽象类进行new
,而是对该抽象类中存在的内部类做new
的操作。 在这种情况下,抽象类充当命名空间。
您不能实例化一个抽象类。 您的示例“有效”是因为您并未真正实例化抽象类。
MyClass myClass = new SampleClass();
SampleClass是MyClass类的子级和实现,因此它不是抽象的。 因此,这条线只是应该工作。 尝试将new SampleClass()
替换为new MyClass()
,您将收到编译器错误。
MyClass.StaticClass staticClass = new MyClass.StaticClass();
在这种情况下与:
StaticClass staticClass = new StaticClass();
只是在抽象类内部声明的内部类的实例。 由于此内部类不是抽象的,因此可以实例化。
尝试这个...
1.外部类非常占有其内部类(无论是静态的还是非静态的)。
2.因此,访问内部类(静态或非静态)需要外部类。
例如:
Outer.Inner i = new Outer.Inner();
在上面的示例中,我不是在初始化外部类,而是在您的情况下,它不是抽象的,因此没有问题被初始化 ,但它的内部静态类(也称为顶级类)已被初始化。
无法实例化抽象类! 这就是Java规则。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.