本帖最后由 逝去的记忆ヽ 于 2012-6-18 20:39 编辑
对象转型分为两种:一个是向上转型,一个是向下转型。
现在有动物、鸟类、燕子三个名词,他们之间有什么关系呢?通常我们都会说,燕子是特殊的鸟类,或者说燕子是鸟类的一种。为此,从对象的定义来看,鸟类就是一个父类,而燕子就是一个子类。或者说,燕子对象就是一个鸟类对象。由于燕子是鸟类的一个对象,所以鸟类所具有的特性燕子全部具有。而燕子所具有的特性(如迁徙)则鸟类不一定都具有。在这个例子中,燕子也是一种鸟类。为此可以将燕子的对象堪称是一个鸟类的对象。这种方法在Java语言环境中就叫做“向上转型”。
但是,在实际工作中,我们还经常会遇到向下转型的情况。也就是说从一个抽象类中(鸟类)引用具体类(燕子)中的对象。也就是说,我们可以说燕子是鸟类的一种。但是现在反过来,如果说鸟类就是燕子,那显然就是以偏概全了,因为燕子并不具有其他鸟类的特性。如鸽子的特性燕子就没有。所以,在应用程序开发中,如果将父类对象赋值给子类的对象,就可能有问题。如果硬要这么做的话,则很有可能发生编译器错误。因为父类对象并不一定是子类的实例。这是什么意思呢?即所说的鸟类(父类对象)并不一定是子类对象(燕子)。因为鸟类对象还有可能是鸽子、白鹭等等。所以,如果将父类对象给子类对象的话,那么就会出现问题。
关于如何判断对象类型可以用 instanceOf来判断
给你一个代码例子:
public int compareTo(Object obj)
{
if (!(obj instanceof Student))//这里就是判断接收的Object类对象是不是Student对象,如果不是那就抛出异常。
throw new RuntimeException("不是学生对象。");
Student s = (Student)obj;//进行强制转换 将接受的OBJ转化成student类
System.out.println(this.age+"--------"+s.age);
if (this.age>s.age)
return 1;
if(this.age == s.age)
{
return this.name.compareTo(s.name);//在比较字符串时,String类也继承了comparable这个接口。
}
return -1; |