Java 带有接口的instanceof
如果我试图将instanceof操作符用于错误的类,我会得到一个编译错误(“动物不能转换为字符串”),但对于接口,我不会得到编译时错误 例如:在第10行,我得到一个编译错误,因为Animal不是String的子类。但在第14行中,我并没有得到编译错误,即使Animal并没有实现List接口Java 带有接口的instanceof,java,instanceof,Java,Instanceof,如果我试图将instanceof操作符用于错误的类,我会得到一个编译错误(“动物不能转换为字符串”),但对于接口,我不会得到编译时错误 例如:在第10行,我得到一个编译错误,因为Animal不是String的子类。但在第14行中,我并没有得到编译错误,即使Animal并没有实现List接口 class Animal { } public class InstanceOf { /** * @param args the command line arguments
class Animal {
}
public class InstanceOf {
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
Animal a = new Animal();
if (a instanceof String ){ //line 10
System.out.println("True");
}
if (a instanceof List ){ //line 14
System.out.println("True");
}
}
}
a
永远不能是字符串的实例,因此编译错误
a
可以是List
的实例,如果Animal
的某个子类将实现List
接口,并且您将该子类的实例分配给a
。因此编译器允许它
从:
如果RelationalExpression对ReferenceType的强制转换(§15.16)将作为编译时错误被拒绝,那么RelationalExpression的instanceof同样会产生编译时错误。在这种情况下,instanceof表达式的结果永远不会为真
这只是我从这个问题做的一个实验
class Animal {}
interface AnimalA {}
class AnimalB{}
class AnimalC extends Animal,AnimalB {} //not possible
class AnimalD extends Animal implements AnimalA{} //possible
public class InstanceOfTest {
public static void main(String[] args) {
Animal a = new Animal();
if(a instanceof AnimalA) { //no compile time error
System.out.println("interface test");
}
if(a instanceof AnimalB) { //compile time error
System.out.println("interface test");
}
if(a instanceof List) { //compile time error
System.out.println("interface test");
}
if(a instanceof ArrayList) { //compile time error
System.out.println("interface test");
}
}
}
因此,正如@Eran所说,as
动物
不是动物的一个子类,其子类的非可以成为动物
的实例。但是另一个子类可以实现<代码>接口<代码>列表。< /P>请包含问题中的确切错误信息。考虑:<代码> B类扩展了动物工具列表< /代码>。现在这个:animala=newb()代码>@Tunaki您也有“Dupehammer®”-为什么不关闭它?(很可能:你和我一样犹豫不决…:-/)@Marco13不,昨天根本没有投票权:)java不允许多重继承是根本原因吗?同时,任何子类都可以根据需要实现接口?@nantitv Yes。因为动物不是字符串的子类,所以动物的任何子类都不能是字符串的子类。尽管在您的特定代码段中,即使允许多重继承,也不会有什么区别,因为字符串是最终的,不能进行子类划分。谢谢。字符串我只是拿它为例。@nantitv如果你告诉编译器没有Animal
的子类,它实际上可以推断instanceof
是毫无意义的:只需用final class Animal{}
替换class Animal{}
。