我了解在创建这样的新对象时:
GeomObject tri = new Triangle();
更通用,并且允许更多的可重用性,但是当创建tri时会发生以下情况:
Triangle tri = new Triangle();
由于Triangle是GeomObject的子类,因此tri还是不是GeomObject?声明的类型如何影响编译?谢谢
add:另一个问题:说我有
Integer n1 = new Integer(3); Object n2 = new Integer(4); System.out.println(n1.compareTo(n2));
我在Eclipse上进行了尝试,即使我将n1与n2颠倒了也遇到了错误。我以为n2.compareTo(n1)会起作用,因为它将调用Object compareTo方法,并且由于Integer是对象的实例,因此可以通过,但事实并非如此。你能解释一下吗?
由于Triangle是的一个子类GeomObject,是不是tri还是一个GeomObject?
Triangle
GeomObject
tri
是的。使用instanceof操作员进行测试:
instanceof
System.out.println( (tri instanceof Triangl) ); //prints true System.out.println( (tri instanceof GeomObject) ); //prints true System.out.println( (tri instanceof Object) ); //prints true because every class extends from Object
声明的类型如何影响编译?
它不会有任何影响,只是会使您的代码 不灵活 ,以防您需要使用GeomObject不是的另一种实现Triangle。
更多信息:
我认为那n2.compareTo(n1)会起作用,因为它将调用Object#compareTo方法
n2.compareTo(n1)
Object#compareTo
这是不正确的,因为Object类没有compareTo方法。
Object
compareTo
另一方面,n1.compareTo(n2)由于您在接收到另一个类类型时将传递Object给该compareTo方法,因此将不起作用。Integer#compareToInteger
n1.compareTo(n2)
Integer#compareTo
Integer
请注意,在声明时:
Object n2 = new Integer(4);
String
n2
equals
hashCode
toString