java语言中方法的多态

简介: java语言中方法的多态

前言

       自然界中,生物是多种形态的,繁殖这一行为也是多样的,细菌是裂殖,禽类是卵生,哺乳动物是胎生......java语言中的一个创建的方法,看成这个例子中的"繁殖",那么想要在不同类中(不同生物身上)实现对应的怎么"繁殖",这就要用到"多态"

一、多态是什么?

       多态,将同一个方法,通过多个子类继承父类子类覆写父类方法,在同包的类上,父类对象子类实例化,实现同一个代表某种行为的方法,产生不同的具体效果

二、使用步骤

1.实操展示

       情景:养殖场中养着鸡、鸭、鹅三种禽类,养殖场中配备了传感器,每产出一个蛋,后台都会记录出产了什么蛋

      思考:鸡、鸭、鹅三种动物都进行着同一种行为,产蛋,只是产的蛋具体为鸡、鸭、鹅的蛋,利用“多态”的思维即可

        第一步 创建父类 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()方法,而三个方法,名称相同,输出结果却分别是 鸡蛋,鹅蛋,鸭蛋。这便是多态的思维。

2.注意事项

              在某些情况下,需要用到多态的思维时,我们会发现,不用多态的思维,也可以解决,而这常常在代码框架上留下了逻辑漏洞。

                出现BUG时,我们编写的程序,没有明确的逻辑和框架,Debug的时间将大大增长,哪出错了?为什么出错了?改错后会不会对其他的功能产生影响?于是一支烟,发呆一整天。

                多态是java面向对象编程的一个重要概念,让我们的代码模块化,在做大项目时,模块化决定着这个项目的维护成本。打个比方,一辆车,前保险盖冒烟了,我们立马知道是车的引擎出了问题,修引擎即可,不用把汽车全部拆开,也不用担心引擎没修好,会影响车的轮胎。

                因此,多态在做大项目中,必不可缺。

总结

       以上就是java中方法的多态思想,本文仅简单介绍了多态的使用,更加巧妙的运用,还需要我们在编写项目中实际操作。文章中提到,创建父类对象,通过子类实例化,不理解的话,下一篇文章将会解释。

相关文章
|
7天前
|
SQL 安全 Java
安全问题已经成为软件开发中不可忽视的重要议题。对于使用Java语言开发的应用程序来说,安全性更是至关重要
在当今网络环境下,Java应用的安全性至关重要。本文深入探讨了Java安全编程的最佳实践,包括代码审查、输入验证、输出编码、访问控制和加密技术等,帮助开发者构建安全可靠的应用。通过掌握相关技术和工具,开发者可以有效防范安全威胁,确保应用的安全性。
18 4
|
8天前
|
存储 Java 程序员
Java基础的灵魂——Object类方法详解(社招面试不踩坑)
本文介绍了Java中`Object`类的几个重要方法,包括`toString`、`equals`、`hashCode`、`finalize`、`clone`、`getClass`、`notify`和`wait`。这些方法是面试中的常考点,掌握它们有助于理解Java对象的行为和实现多线程编程。作者通过具体示例和应用场景,详细解析了每个方法的作用和重写技巧,帮助读者更好地应对面试和技术开发。
41 4
|
19天前
|
Java API
Java 对象释放与 finalize 方法
关于 Java 对象释放的疑惑解答,以及 finalize 方法的相关知识。
39 17
|
13天前
|
Java 测试技术 Maven
Java一分钟之-PowerMock:静态方法与私有方法测试
通过本文的详细介绍,您可以使用PowerMock轻松地测试Java代码中的静态方法和私有方法。PowerMock通过扩展Mockito,提供了强大的功能,帮助开发者在复杂的测试场景中保持高效和准确的单元测试。希望本文对您的Java单元测试有所帮助。
18 2
|
20天前
|
Java 开发者
在Java多线程编程中,创建线程的方法有两种:继承Thread类和实现Runnable接口
【10月更文挑战第20天】在Java多线程编程中,创建线程的方法有两种:继承Thread类和实现Runnable接口。本文揭示了这两种方式的微妙差异和潜在陷阱,帮助你更好地理解和选择适合项目需求的线程创建方式。
15 3
|
20天前
|
Java 开发者
在Java多线程编程中,选择合适的线程创建方法至关重要
【10月更文挑战第20天】在Java多线程编程中,选择合适的线程创建方法至关重要。本文通过案例分析,探讨了继承Thread类和实现Runnable接口两种方法的优缺点及适用场景,帮助开发者做出明智的选择。
14 2
|
20天前
|
安全 Java
Java多线程通信新解:本文通过生产者-消费者模型案例,深入解析wait()、notify()、notifyAll()方法的实用技巧
【10月更文挑战第20天】Java多线程通信新解:本文通过生产者-消费者模型案例,深入解析wait()、notify()、notifyAll()方法的实用技巧,包括避免在循环外调用wait()、优先使用notifyAll()、确保线程安全及处理InterruptedException等,帮助读者更好地掌握这些方法的应用。
14 1
|
20天前
|
Java 开发者
Java多线程初学者指南:介绍通过继承Thread类与实现Runnable接口两种方式创建线程的方法及其优缺点
【10月更文挑战第20天】Java多线程初学者指南:介绍通过继承Thread类与实现Runnable接口两种方式创建线程的方法及其优缺点,重点解析为何实现Runnable接口更具灵活性、资源共享及易于管理的优势。
27 1
|
20天前
|
Java
在Java多线程编程中,`wait()`和`notify()`方法的相遇如同一场奇妙的邂逅
在Java多线程编程中,`wait()`和`notify()`方法的相遇如同一场奇妙的邂逅。它们用于线程间通信,使线程能够协作完成任务。通过这些方法,生产者和消费者线程可以高效地管理共享资源,确保程序的有序运行。正确使用这些方法需要遵循同步规则,避免虚假唤醒等问题。示例代码展示了如何在生产者-消费者模型中使用`wait()`和`notify()`。
22 1
|
14天前
|
Java Spring
JAVA获取重定向地址URL的两种方法
【10月更文挑战第17天】本文介绍了两种在Java中获取HTTP响应头中的Location字段的方法:一种是使用HttpURLConnection,另一种是使用Spring的RestTemplate。通过设置连接超时和禁用自动重定向,确保请求按预期执行。此外,还提供了一个自定义的`NoRedirectSimpleClientHttpRequestFactory`类,用于禁用RestTemplate的自动重定向功能。