我有一个带有两个抽象方法的抽象类B
public abstract class B
{
public abstract void C();
public abstract void D();
}
我正在尝试使用
创建抽象类的对象B objB = new B(){
@Override
public void C() {
}
@Override
public void D() {
}};
ObjB
是Abstract类的实例吗?另外,我尝试将instanceof
的运算符设为System.out.println(objB instanceof B);
,这将使我返回true
。
如果以上内容不是Abstract Class的对象,那么为什么以上语句返回true?
答案 0 :(得分:1)
不,您不能立即实例化abstract
类,其原因是:它是abstract
。
为了创建此类的实例,您必须创建一个子类,该子类为该类的所有抽象成员提供实现。 即使您没有添加任何抽象方法,这仍然适用。
instanceof
并不表示“此变量属于该类型”,而是该变量属于此类型,或者是从该类型继承的类型的实例。因此,在Java中的任何对象上:
无论myObject的实际类型如何,myObject instanceof Object
如果实例化了myObject,将返回true。
最接近实例化抽象类而不创建具体的命名子类的方法是创建一个匿名实现:
B object = new B() {
@Override
public void C() {
}
@Override
public void D() {
}
}
上面的代码块并不是您对抽象类的直接实例化。
这是一个新类的创建,您没有为其提供名称,并对其进行实例化。