Java向上转型和向下转型的使用方法

  介绍

这篇文章主要介绍Java向上转型和向下转型的使用方法,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!

1向上转型(子类转型成父类)
,举例:

包a.b;      公共类{      公共空间a1 () {      System.out.println (“Superclass");      }      }      一个的子类B:      包a.b;      公共B类扩展了{      公共空间a1 () {      System.out.println (“Childrenclass");//覆盖父类方法      }      公共空间b1 () {}//B类定义了自己的新方法      }      C类:      包a.b;      公共类C {      公共静态void main (String [] args) {      A=new ();//向上转型      a.a1 ();      }      }

如果运行C、输出的是超类还是Childrenclass ?不是你原来预期的超类,而是Childrenclass。这是因为一个实际上指向的是一个子类对象。当然,你不用担心,Java虚拟机会自动准确地识别出究竟该调用哪个具体的方法,不过,由于向上转型,一个对象会遗失和父类不同的方法,例如b1()。有人可能会提出疑问:这不是多此一举吗?我们完全可以这样写:

B=新B ();

a.a1 ();

确实如此!但这样就丧失了面向抽象的编程特色,降低了可扩展性。其实,不仅仅如此,向上转型还可以减轻编程工作量。来看下面的显示器类监视器:

包a.b;      公共班长{      公共空间displayText () {}      公共空间显示图形(){}      }      液晶显示器类LCDMonitor是监控的子类:      包a.b;      公开课LCDMonitor扩展监控{      公共空间displayText () {      System.out.println(“液晶显示屏text");      }      公共空间显示图形(){      System.out.println(“液晶显示屏graphics");      }      }      阴极射线管显示器类CRTMonitor自然也是监控的子类:      包a.b;      公开课CRTMonitor扩展监控{      公共空间displayText () {      System.out.println (“CRT显示器text");      }      公共空间显示图形(){      System.out.println (“CRT显示器graphics");      }      }      等离子显示器PlasmaMonitor也是监控的子类:      包a.b;      公开课PlasmaMonitor扩展监控{      公共空间displayText () {      System.out.println(“等离子显示text");      }      公共空间显示图形(){      System.out.println(“等离子显示graphics");      }      }      现在有一个MyMonitor类。假设没有向上转型,MyMonitor类代码如下:      包a.b;      公开课MyMonitor {      公共静态void main (String [] args) {      运行(新LCDMonitor ());      运行(新CRTMonitor ());      运行(新PlasmaMonitor ());      }      公共静态空运行(LCDMonitor监控){      monitor.displayText ();      monitor.displayGraphics ();      }      公共静态空运行(CRTMonitor监控){      monitor.displayText ();      monitor.displayGraphics ();      }      公共静态空运行(PlasmaMonitor监控){      monitor.displayText ();      monitor.displayGraphics ();      }      }      可能你已经意识到上述代码有很多重复代码,而且也不易维护。有了向上转型,代码可以更为简洁:      包a.b;      公开课MyMonitor {      公共静态void main (String [] args) {      运行(新LCDMonitor ());//向上转型      运行(新CRTMonitor ());//向上转型      运行(新PlasmaMonitor ());//向上转型      }      公共静态空运行(监视器监视){//父类实例作为参数      monitor.displayText ();      monitor.displayGraphics ();      }      }      我们也可以采用接口的方式,例如:      包a.b;      公共接口监控{      抽象的空白displayText ();      抽象的空白显示图形();      }      将液晶显示器类LCDMonitor稍作修改:      包a.b;      公共类LCDMonitor实现监控{      公共空间displayText () {      System.out.println(“液晶显示屏text");      }      公共空间显示图形(){      System.out.println(“液晶显示屏graphics");      }      }

Java向上转型和向下转型的使用方法