抽象类强制实例化java
我们知道在java中不能创建抽象类的实例。 但是,这是可行的:抽象类强制实例化java,java,abstract,rules,Java,Abstract,Rules,我们知道在java中不能创建抽象类的实例。 但是,这是可行的: public abstract class MyAbstract { int num = 10; } //and in main class public static void main(String[] args) { MyAbstract abstractObject = new MyAbstract() {}; System.out.println(abstr
public abstract class MyAbstract
{
int num = 10;
}
//and in main class
public static void main(String[] args) {
MyAbstract abstractObject = new MyAbstract() {};
System.out.println(abstractObject.num);
}
输出:
运行:
十,
那么我们可以吗?
简而言之,这里发生了什么?语法
new X(...) { ... }
实例化一个特殊的匿名类,扩展/实现名为X的类/接口
在您的例子中,抽象类拥有它所需要的一切,没有抽象方法。因此,派生类不需要实现任何缺少的方法
如果将抽象方法添加到抽象类中,则示例将不再有效。要使它再次工作,您必须在{…}部分实现该方法
public abstract class MyAbstract
{
int num = 10;
abstract void f();
}
public static void main(String[] args) {
MyAbstract abstractObject = new MyAbstract() {
void f() {
...
}
};
System.out.println(abstractObject.num);
}
此外,可以使用语法的()部分将参数传递给扩展基类的构造函数:
public abstract class MyAbstract
{
MyAbstract(int argument) {
...
}
int num = 10;
abstract void f();
}
public static void main(String[] args) {
MyAbstract abstractObject = new MyAbstract(5) {
void f() {
...
}
};
System.out.println(abstractObject.num);
}
myabstractobject=newmyabstract(){}
创建MyAbstractClass
的新子类。那个子类的名称?没有。这就是为什么它被称为匿名类。