In addition to Weibo, there is also WeChat
Please pay attention
WeChat public account
Shulou
2025-01-17 Update From: SLTechnology News&Howtos shulou NAV: SLTechnology News&Howtos > Development >
Share
Shulou(Shulou.com)06/02 Report--
本篇文章为大家展示了怎样通过应用实例讨论Java多态的实现,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。
实现Java多态
在代码中实现Java的多态必须遵循的要求可归纳如下:
1.代码中必须有超类和子类继承关系。
2.超类提供作为接口的方法,对子类完善或者覆盖这些方法指定规范。
3.参与多态的子类必须完善或者覆盖这些指定的方法,以达到接口效应。
4.编写驱动类,或者应用代码,子类向上转型为超类引用,实现多态。
下面小节应用实例分别讨论如何实现多态。
超类提供Java多态接口
以计算圆形物体表面积和体积为例,讨论多态对超类的要求以及如何提供多态接口:
public abstract class Shape { ... // 以下定义抽象方法作为多态接口 public abstract void computeArea(); public abstract void computeVolume(); public abstract double getArea(); //新增参与多态的接口方法 public abstract double getVolume(); }
除原来存在的两个抽象方法外,因为getArea()和getVolume()也涉及和参与多态功能,因此将它们定义为实现多态的接口方法。另外多态的实现不影响任何其他运算和操作,所以这个代码的其他部分无需修改。
当然执行多态的超类不必一定是抽象类。但因为在这个超类中,什至大多数应用程序的超类中,只提供执行具体运算的方法的签名,不可能提供具体代码。所以应用抽象方法作为多态接口比较普遍。
如在计算公司雇员工资的超类中:
// 用抽象方法作为多态接口 public abstract class Employee { ... public abstract double earnings(); //定义抽象方法作为多态接口 }
也可定义为普通方法,如:
//这个方法将作为多态接口被子类的方法所覆盖 public class Manager extends Employee { ... public double eamings () return 0.0;
子类完善接口
在计算圆形物体表面积和体积的例子中,CircleShape2继承了Shape,Circle继承了CircleShape2。Circle类中完善了抽象超类指定的、作为多态接口的抽象方法如下:
public class Circle extends CircleShape2 { ... double volume = 0.0; //Circle类没有体积 public void computeArea() { //完善超类作为多态接口的抽象方法 area = Math.PI * radius * radius; } public double getArea() { return area; } public void computeVolume() {} //完善超类作为多态接口的抽象方法 public double getVolume() { return volume; } }
代码中完善了超类Shape规定的四个作为多态接口的抽象方法,实际上,已存在的Circle程序已经编写了其中的两个方法,只需要完善computeVolume()和getVolume()即可。Circle类没有体积计算,所以ComputeVolume()为空程序体且getVolume()返回值为0.0。
以此类推,Sphere继承了Circle,覆盖了Circle的computeArea()和computeVolume():
public class Sphere extends Circle{ ... public void computeArea() { //覆盖Circle的该方法 super.computeArea(); //调用Circle的方法 area = 4* area; } public void computeVolume() { //覆盖Circle的该方法 super.computeArea(); //调用Circle的方法 volume = 4.0/3 * radius * area; } }
并且继承了getArea()和getVolume()。显而易见,抽象类和覆盖技术的应用,已经为实现多态铺平了道路。这里,只是对抽象类中指定的抽象方法,以及子类完善这些方法,从多态接口的角度加以新的内容和解释。按照这个概念代码技术,编写计算员工工资的子类也是水到渠成的事。如:
//Demo code public Manager extends Employee { ... public double earnings () { return baseSalary + meritPay + bonus; }
值得一提的是,如果超类中定义的作为多态接口的方法是一个完善了的普通方法,在子类中则需覆盖它,以便实现多态。
如何使用Java的多态
调用多态方法是通过向上转型,或称超类引用实现的。即向上转型后,由超类产生对子类多态方法的动态调用,如:
Circle myCircle = new Circle(20.98); Shape shape = myCircle; //向上转型或超类引用 shape.computeArea();. //多态调用 ...
应用链接表或集合,以及循环,则可有效地对大量的对象方法实行多态调用。本书将在以后的章节专门讨论循环、链接表和集合技术。
如下是对计算圆形物体的表面积和体积实现多态调用的代码:
public class CircleShapeApp{ public static void main(String[] args) { Circle circle = new Circle(12.98); Sphere sphere = new Sphere(25.55); Shape shape = circle; //向上转型 //多态调用 shape.computeArea(); shape.computeVolume(); System.out.println("circle area: " + shape.getArea()); System.out.println("circle volume: " + shape.getVolume()); //多态调用 shape = sphere; shape.computeArea(); shape.computeVolume(); System.out.println("Sphere area: " + shape.getArea()); System.out.println("Sphere volume: " + shape.getVolume()); } }
这里对Circle对象多态调用computeVolume()毫无意义,仅是为了演示目的。其运行结果为:
circle area: 529.2967869138698 circle volume: 0.0 Sphere area: 2050.8395382450512 Sphere volume: 69865.26693621474
如果需要多态调用大量对象,可以使用数组和循环如下:
... for(int i = 0; i < objNum; i++) { //循环objNum次 shape[i].computeArea(); //i从0到objNum-1 shape[i].computeVolume(); System.out.println("The area: " + shape[i].getArea()); System.out.println("The volume: " + shape[i].getVolume()); }
这个循环语句也被称为多态管理循环。
上述内容就是怎样通过应用实例讨论Java多态的实现,你们学到知识或技能了吗?如果还想学到更多技能或者丰富自己的知识储备,欢迎关注行业资讯频道。
Welcome to subscribe "Shulou Technology Information " to get latest news, interesting things and hot topics in the IT industry, and controls the hottest and latest Internet news, technology news and IT industry trends.
Views: 0
*The comments in the above article only represent the author's personal views and do not represent the views and positions of this website. If you have more insights, please feel free to contribute and share.
Continue with the installation of the previous hadoop.First, install zookooper1. Decompress zookoope
"Every 5-10 years, there's a rare product, a really special, very unusual product that's the most un
© 2024 shulou.com SLNews company. All rights reserved.