Java上(下)转型对象

上转型对象

上转型对象就是声明一个父类的引用指向子类的实例化对象,例如

A a = new B();
或者
B b = new B() ; A a = b ;
其中 A 是 B 的父类, 对象 a 就是上转型对象
那么为什么需要上转型对象,其实就是满足一种需求,关于这个需求的内容,就是上转型对象的作用,以下:

  • 属性 : 上转型对象只能访问父类中的属性,不能访问子类新增的属性,至于子类隐藏的属性,当你使用类名.属性名时,返回的是父类的属性值
  • 方法 : 上转型对象能访问父类中的方法,不能访问子类新增的方法,如果访问被子类重写的方法,调用的是被重写后的方法
  • 之所以会这样,主要是因为上转型对象本质还是一个子类对象,当你对上转型对象使用getClass,返回的是子类对象类型,而当声明为父类的引用指向这个子类对象时,这个子类对象实例就被削弱了,
  • 我用一个例子通俗的解释这个削弱的过程.
  • 假设有这样一个修仙家族,一个年轻人学会了所有父亲祖辈的功法,而这些功法有一些会根据个体身体的不同而变异,而这个年轻人就变异了其中一些功法(重写方法),然后自己又领悟了属于自己的一些功法(新增方法),然后在世间有些名号(新增属性),然后他名为 飞(隐藏属性),家族有相传的姓 张 (继承属性).大事发生了,这个年轻人被自己的父亲夺舍了(上转型),而这个事情又被所有人知道了(jvm知道它是上转型对象),然后这个父亲用自己儿子的身体行走天下.祖辈相传的功法(继承方法)他当然能使用,那些因为变异的功法(重写方法),因为身体的原因,也可以使用,但是儿子自己领悟的功法(新增方法)这个父亲就不会了.因为天下都知道这件事,儿子以前的名号(新增属性)就用不了,儿子的名(隐藏属性)也不属于父亲,父亲只能使用自己的名(被隐藏的名),使用祖辈相传的姓(被继承的属性).就这样,继续行走天下.
  • 如果子类对象的重写方法中使用了子类新增的方法,这个方法上转型对象也可以使用.用上面的例子就是年轻人的变异功法融合了自己领悟的功法,

下转型对象

下转型不是将一个父类对象强转成子类对象,这样会直接报错
java.lang.ClassCastException
而是将上转型对象再转回子类对象,使其变成一个子类对象实例,功能其实就是子类对象实例的功能

  • 继续用我们上面的例子,就是这个年轻人其实没有死,他又重新夺回了自己的身体,这件事又被天下知道了,他就恢复了自己的全部

哈哈,个人比较喜欢修仙小说,就这样举例了

猜你喜欢

转载自blog.csdn.net/qq_36865108/article/details/84776730