这很好用。
package abstracttest;
public abstract class AbstractClass implements NewInter {
public abstract void doStuff();
public void doStuff2() {
System.out.println("in doStuff2");
}
/*
* public static void main(String a[]) { AbstractClass ab = new
* AbstractClass() {
*
* @Override public void doStuff() { // TODO Auto-generated method stub
* System.out.println(" doStuff "); }
*
* @Override public void doInter() { // TODO Auto-generated method stub
*
* } };
*
* ab.doStuff2(); ab.doStuff();
*
* NewInter ni = new NewInter() {
*
* @Override public void doInter() { // TODO Auto-generated method stub
* System.out.println("do Inter"); }
*
* }; ni.doInter();
*
* AbstractClass ab1 = new AbstractClass(); }
*/
}
interface NewInter {
String con = "Hell";
void doInter();
}
class Impl extends AbstractClass {
@Override
public void doInter() {
// TODO Auto-generated method stub
}
@Override
public void doStuff() {
// TODO Auto-generated method stub
}
public static void main(String[] s) {
AbstractClass ab = new AbstractClass() {
@Override
public void doInter() { // TODO Auto-generated method stub
System.out.println("impl doInter");
}
@Override
public void doStuff() { // TODO Auto-generated method stub
System.out.println("impl doStuff");
}
};
ab.doInter();
ab.doStuff();
NewInter ni1 = new NewInter() {
@Override
public void doInter() {
// TODO Auto-generated method stub
}
};
ni1.doInter();
}
}
我能够从抽象类的 main()
和 实例化
。抽象类
和接口(interface)
类Impl
这怎么可能?
我本来期待一个异常,但调用工作正常。
有人可以解释一下这些现象吗?我很困惑。
A Java abstract class also cannot be instantiated, but can be invoked if a main() exists.
我在 blog 中读到了这篇文章。这是什么意思?
还有其他方法可以调用抽象类的构造函数吗?有的话请告诉我。
最佳答案
不,您没有实例化它们。您仅创建了实现接口(interface)或扩展抽象类的匿名类。这些匿名类类型的对象实际上被实例化。
关于java - 实例化一个抽象类或接口(interface),可能吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14976545/