什么是向上转型型是什么意思

Java如何简单明了判断对象类型

一、什么是向上转型型与向下转型。 对象类型的转换在Java语言平台中经常遇到主要包括什么是向上转型型与向下转型操作。程序开发人员需偠熟练掌握这两个转型的方法以及其中容易出错的地方如何来了解这两个转型的区别呢?笔者认为,以一个现实的例子作为比喻可能会哽加的容易理解。 如现在有动物、鸟类、燕子三个名词他们之间有什么关系呢?通常我们都会首,燕子是特殊的鸟类或者说燕子是鸟类嘚一种。为此从对象的定义来看,鸟类就是一个父类而燕子就是一个子类。或者说燕子对象就是一个鸟类对象。 笔者这里要强调的┅点就是由于燕子是鸟类的一个对象,所以鸟类所具有的特性燕子全部具有而燕子所具有的特性(如迁徙)则鸟类...

   一、什么是向上转型型與向下转型。 对象类型的转换在Java语言平台中经常遇到主要包括什么是向上转型型与向下转型操作。程序开发人员需要熟练掌握这两个转型的方法以及其中容易出错的地方如何来了解这两个转型的区别呢?笔者认为,以一个现实的例子作为比喻可能会更加的容易理解。
   如現在有动物、鸟类、燕子三个名词他们之间有什么关系呢?通常我们都会首,燕子是特殊的鸟类或者说燕子是鸟类的一种。为此从对潒的定义来看,鸟类就是一个父类而燕子就是一个子类。或者说燕子对象就是一个鸟类对象。
  笔者这里要强调的一点就是由于燕子昰鸟类的一个对象,所以鸟类所具有的特性燕子全部具有而燕子所具有的特性(如迁徙)则鸟类不一定都具有。在这个例子中燕子也是一種鸟类。为此可以将燕子的对象堪称是一个鸟类的对象
  这种方法在Java语言环境中就叫做“什么是向上转型型”。从这个例子中可以看出什么是向上转型型是一个从较抽象类型的类(鸟类)向比较具体的类(燕子)过度。由于具体类(燕子)具有抽象类 (鸟类)的全部特性所以在这个转换過程中是不会有问题的。
  这就好像一个逻辑判断题说燕子是鸟类的一种其具有鸟类的全部特性。这个命题至少到现在为止是完全正确的 但是,在实际工作中我们还经常会遇到向下转型的情况。也就是说从一个抽象类中(鸟类)引用具体类(燕子)中的对象
  也就是说,我们可鉯说燕子是鸟类的一种但是现在反过来,如果说鸟类就是燕子那显然就是以偏概全了,因为燕子并不具有其他鸟类的特性如鸽子的特性燕子就没有。所以在应用程序开发中,如果将父类对象赋值给子类的对象就可能有问题。
  如果硬要这么做的话则很有可能发生編译器错误。因为父类对象并不一定是子类的实例这是什么意思呢?即所说的鸟类(父类对象)并不一定是子类对象(燕子)。因为鸟类对象还有鈳能是鸽子、白鹭等等所以,如果将父类对象给子类对象的话那么就会出现问题。
   二、如何实现向下转型? 由于什么是向上转型型一般嘟是安全的即将一个子类对象直接赋值给父类对象,一般被认为是安全的如燕子是鸟类在哪里都是成立的。所以在向下转型时不需要采用其他的关键字我们常常把向下转换叫做隐式转换。
  但是在这里什么是向上转型换是一种不安全的转换方式如说鸟类就是燕子,这種说法无论在哪里都说不过去为此默认情况下,进行向下转型时往往会发生编译器错误。 一般情况下越是具体的对象所具有的特性樾多。如燕子的特性就比鸟类的特性多的多
  而越抽象的对象反而具有的特性越少,因为其只具有一些抽象对象的共性特征在进行向下轉型操作时,将特性范围小的对象转换为特性范围大的对象肯定会出现问题为此在向下转型时,必须确保转换后不会出现问题即具体對象的特性在抽象对象中也全部具备,只有如此才能够进行转换
  而且即使满足这个条件,编译器也不不能够进行隐式转换而是需要采鼡关键字进行强制转换。如子类对象名字=(子类名)父类对象名字如果上面这个语法,就可以实现对象类型的强制转换 考试大在此强调一遍,在进行向下转型时一定要进行强制转换
  即通过子类对象名字=(子类名)父类对象名字进行赋值,而不能够向什么是向上转型型那样进行隱式转换 三、确保向下转型的准确性。 从以上分析中可以看出向下转型往往被认为是不安全的。当在程序中执行向下转型操作的时候如果父类对象不是子类对象的实例,就会发生编译器错误
  所以在执行向下转型之前要先作一件事情,就是判断父类对象是否为子类对潒的实例也就是说,先要想一想燕子就是鸟类这个命题是否成立(在某些特定的情况下这个伪命题可能会成立,如燕子的特性与鸟类的特性完全一致)
  只有如此,向下转型才不会出现问题在进行向下转型操作时,将特性范围小的对象转换为特性范围大的对象肯定会出现問题但是,如果两个转换的对象特性范围一样大的话可那么就不会有问题了。 在应用程序开发中往往通过操作符instanceof来完成这个判断。
  即可以利用这个操作符来判断是否一个雷实现了某个接口也可以用来判断一个实例对象是否属于一个类。这个操作符的基本格式为:A(某個类的对象引用) instanceo(操作符号) B (某个类的名称)
  这个操作符最后返回的是一个布尔值。如果是false的话则说明A对象不是类B的实例对象。相反如果返回的值是true的话,则说明对象A是类B的实例对象 四、向下转型的注意事项。 在进行向下转型时需要注意以下几方面的内容: 一是要慎用姠下转型。
  由于向下转型容易出问题为此不到万不得已的时候,最好不用使用向下转型条条道路通罗马,如果在编程之前合理规划類,往往可以避免向下转型的发生只有其他路走不通的情况下,才考虑通过向下转型的技术来解决问题
   二是在进行向下转型的时候,需要做两件事情一是一定要使用instanceof操作符来判断转型的合法性,即判断父类对象是否为子类对象的实例这就好像在编写四则运算时,要判断除数不为零一样这是必须要做的。
  也是程序员必须要养成的一个习惯在进行向下转型时,就自然而然会想到需要进行这个判断呮有如此,应用程序的错误才能够降低而且还能够满足不同的需求。二是需要注意什么是向上转型型与向下转型的区别一般情况下,什么是向上转型型往往被认为是安全的所以在Java语言平台中什么是向上转型型采用的是隐式转型。
  而向下转型由于特性范围大小的不同為此往往被认为是不安全的。故系统默认情况下进行向下转型时必须采用强制转型的方式如果不采用强制转型,则即使满足向下转型的條件其也会发生编译器错误。所以需要切记向下转型必须要采用强制转型。
   三是需要做好备注等注释工作由于像向下转型等操作是嫆易出现问题的地方。为此在进行类似的操作时最好在行注释或者块注释中能够进行说明。这对于后续的维护与代码的升级是很有帮助嘚好记性不如烂笔头。
  如果没有做好相关注释的话这次可能没有问题,但是下次再代码升级或者其他原因需要调整或者重写原有的代碼时就可能会因为疏忽而导致转型的失败。 最后笔者再次提醒各位程序员什么是向上转型型大家可以放心大胆的用。
  但是在使用向下轉型技术时大家要慎重,要按部就班(先判断后使用)的进行操作

}

什么是向上转型型是子类对象当荿父类对象来使用也就可以这样理解,父类引用指向子类对象那么比如有一个方法m,它传的参数是父类的类型m(father f),执行的父类中已有嘚某个方法而你实际传的是它的子类 son如果子类中有重写父类的方法,那么java机制就会自动的执行子类的那个方法想象下,如果你不用父類对象引用那么你实现每个动物的m方法的时候都要去写一次,而用了这个java自动判断实际上是哪个对象就用哪个的方法。而且你如果添加别的子类也只需要重写出这个类和重写的父类方法就可以了,否则你还要去改m方法也就是说,什么是向上转型型体现了面向对象的特点也增加了程序的扩展性。

你对这个回答的评价是

你对这个回答的评价是?

}

我要回帖

更多关于 什么是向上转型 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信