由于
Triangle是的一个子类GeomObject,是不是tri还是一个GeomObject?
是的。使用
instanceof操作员进行测试:
System.out.println( (tri instanceof Triangl) ); //prints trueSystem.out.println( (tri instanceof GeomObject) ); //prints trueSystem.out.println( (tri instanceof Object) ); //prints true because every class extends from Object
声明的类型如何影响编译?
它不会有任何影响,只是会使您的代码 不灵活 ,以防您需要使用
GeomObject不是的另一种实现
Triangle。
更多信息:
- “编程到接口”是什么意思?
我认为那
n2.compareTo(n1)会起作用,因为它将调用Object#compareTo方法
这是不正确的,因为
Object类没有
compareTo方法。
另一方面,
n1.compareTo(n2)由于您在接收到另一个类类型时将传递
Object给该
compareTo方法,因此将不起作用。
Integer#compareTo
Integer
请注意,在声明时:
Object n2 = new Integer(4);
- 变量类型将是
Object
,无论您将其初始化为Integer
还是另一个类,例如String
。 - 只有被覆盖的方法才能像对象引用运行时类型中定义的那样运行,这意味着,如果您的
n2
变量持有一个Integer
,则只有Integer
从class中被类覆盖的方法Object
才能像在Integer
类中定义的那样运行,所有其他方法,字段甚至变量本身会表现为Object
。在以下情况下Integer
类,这些方法是equals
,hashCode
和toString
。 - 上面提供的链接: “编程到接口”是什么意思? 解释了使用接口(或抽象类或泛型类)通过泛型接口/类而不是直接实现来泛化工作的好处。请注意,在某些情况下,这种方法 将不适用, 例如您当前的示例使用
Object
何时应使用Integer
。请注意,Object
类 太 通用了(至少在这种情况下如此),因此,我不建议Object
直接使用至少您了解自己真正在做什么。



