自然界中,生物是多种形态的,繁殖这一行为也是多样的,细菌是裂殖,禽类是卵生,哺乳动物是胎生......java语言中的一个创建的方法,看成这个例子中的"繁殖",那么想要在不同类中(不同生物身上)实现对应的怎么"繁殖",这就要用到"多态"
多态,将同一个方法,通过多个子类继承父类,子类覆写父类方法,在同包的类上,父类对象子类实例化,实现同一个代表某种行为的方法,产生不同的具体效果
情景:养殖场中养着鸡、鸭、鹅三种禽类,养殖场中配备了传感器,每产出一个蛋,后台都会记录出产了什么蛋
思考:鸡、鸭、鹅三种动物都进行着同一种行为,产蛋,只是产的蛋具体为鸡、鸭、鹅的蛋,利用“多态”的思维即可
第一步 创建父类 Animal类,创建 produce 方法
package package3;
public class Animal {
void produce(){
}
}
第二步 创建子类 Chicken类,Goose类,Duck类,覆写 produce 方法 改为相应的内容
(1)Chicken类
package package3;
public class Chicken extends Animal{
void produce() {
System.out.println("获得一枚鸡蛋");
}
}
(2)Goose类
package package3;
public class Goose extends Animal{
void produce(){
System.out.println("获得一枚鹅蛋");
}
}
(3)Duck类
package package3;
public class Duck extends Animal{
void produce() {
System.out.println("获得一枚鸭蛋");
}
}
第三步 创建Demo类
1.通过随机数,生成0,1,2,模拟鸡鸭鹅的随机产卵,0 为鸡蛋,1为鹅蛋,2为鸭蛋
2.创建 父类对象 通过子类 实例化,调用对应子类的produce()方法
package package3;
import java.util.Random;
public class Demo {
public static void main(String[] args) {
Random num = new Random();
int num0 = 0 , num1 = 0 , num2 = 0;
for(int i=0;i<5;i++) {
int j = num.nextInt(3); //模拟鸡鸭鹅的随机产卵,0 为鸡蛋,1为鹅蛋,2为鸭蛋
if(j==0) {
Animal chicken = new Chicken(); // Animal 对象 Chicken类实例化
chicken.produce(); //调用Chicken类中的 produce方法
num0++;
}if(j==1) {
Animal goose = new Goose(); // Animal 对象 Goose类实例化
goose.produce(); //调用Goose类中的 produce方法
num1++;
}if(j==2) {
Animal duck = new Duck(); // Animal 对象 Duck类实例化
duck.produce(); //调用Duck类中的 produce方法
num2++;
}
}
System.out.println("------------------------");
System.out.println(" 养殖场库存 ");
System.out.println("鸡蛋个数:"+num0);
System.out.println("鹅蛋个数:"+num1);
System.out.println("鸭蛋个数:"+num2);
System.out.println("------------------------");
}
}
如Demo类中的代码所示,分别调用了三个 produce()方法,而三个方法,名称相同,输出结果却分别是 鸡蛋,鹅蛋,鸭蛋。这便是多态的思维。
在某些情况下,需要用到多态的思维时,我们会发现,不用多态的思维,也可以解决,而这常常在代码框架上留下了逻辑漏洞。
出现BUG时,我们编写的程序,没有明确的逻辑和框架,Debug的时间将大大增长,哪出错了?为什么出错了?改错后会不会对其他的功能产生影响?于是一支烟,发呆一整天。
多态是java面向对象编程的一个重要概念,让我们的代码模块化,在做大项目时,模块化决定着这个项目的维护成本。打个比方,一辆车,前保险盖冒烟了,我们立马知道是车的引擎出了问题,修引擎即可,不用把汽车全部拆开,也不用担心引擎没修好,会影响车的轮胎。
因此,多态在做大项目中,必不可缺。
以上就是java中方法的多态思想,本文仅简单介绍了多态的使用,更加巧妙的运用,还需要我们在编写项目中实际操作。文章中提到,创建父类对象,通过子类实例化,不理解的话,下一篇文章将会解释。