多态的作用

2023-11-01

对象的上转型对象体现了多态。多态的作用:将不同的子类对象统一看做父类,屏蔽了不同子类之间的差异,有子类到父类,有特殊到一般,是程序变得通用。

public class TestPloy{
   public sataic void main(String[] args){
       Dog a0=new Dog();
      Cat a1=new Cat();
      Tiger a2=new Tiger();
      Sheep a3=new Sheep();
      Wolf a4=new Wolf();
      Mouse a5=new Mouse();
      Snake a6=new Snake();
      Monkey a7=new Monkey();
      Cock a8=new Cock();
      YelloMouseWolf a9=new YelloMouseWolf();
 
      a0.eat();
      a1.eat();
      a2.eat();
      a3.eat();
      a4.eat();
      a5.eat();
      a6.eat();
      a7.eat();
      a8.eat();
      a9.eat();
     }
}
class Animal{
   public void eat(){
   }
}
class Dog extends Animal{
   public void eat(){
      System.out.println("Dog eat...")
   }
}
class Cat extends Animal{
   public void eat(){
      System.out.println("Cat eat...")
   }
}
class Tiger extends Animal{
   public void eat(){
      System.out.println("Tiger eat...")
   }
}
class Sheep extends Animal{
   public void eat(){
      System.out.println("Sheep eat...")
   }
}
class Wolf extends Animal{
   public void eat(){
      System.out.println("Wolf eat...")
   }
}
class Mouse extends Animal{
   public void eat(){
      System.out.println("Mouse eat...")
   }
}
class Snake extends Animal{
   public void eat(){
      System.out.println("Snake eat...")
   }
}
class Monkey extends Animal{
   public void eat(){
      System.out.println("Monkey eat...")
   }
}
class Cock extends Animal{
   public void eat(){
      System.out.println("Cock eat...")
   }
}
class YelloMouseWolf extends Animal{
   public void eat(){
      System.out.println("YelloMouseWolf eat...")
   }
}

从上面的程序可以看出比较麻烦,下面是用多态来简化后的程序

public class TestPloy{
   public sataic void main(String[] args){
      Animal[] a=new Animal[10];//将子类对象统一看做父类对象
      a[0]=new Dog();
      a[1]=new Cat();
      a[2]=new Tiger();
      a[3]=new Sheep();
      a[4]=new Wolf();
      a[5]=new Mouse();
      a[6]=new Snake();
      a[7]=new Monkey();
      a[8]=new Cock();
      a[9]=new YelloMouseWolf();
 
 for(int i=0;i<a.length;i++){

                a[i].eat();

         }
}
class Animal{
   public void eat(){
   }
}
class Dog extends Animal{
   public void eat(){
      System.out.println("Dog eat...")
   }
}
class Cat extends Animal{
   public void eat(){
      System.out.println("Cat eat...")
   }
}
class Tiger extends Animal{
   public void eat(){
      System.out.println("Tiger eat...")
   }
}

class Sheep extends Animal{
   public void eat(){
      System.out.println("Sheep eat...")
   }
}
class Wolf extends Animal{
   public void eat(){
      System.out.println("Wolf eat...")
   }
}
class Mouse extends Animal{
   public void eat(){
      System.out.println("Mouse eat...")
   }
}
class Snake extends Animal{
   public void eat(){
      System.out.println("Snake eat...")
   }
}
class Monkey extends Animal{
   public void eat(){
      System.out.println("Monkey eat...")
   }
}
class Cock extends Animal{
   public void eat(){
      System.out.println("Cock eat...")
   }
}
class YelloMouseWolf extends Animal{
   public void eat(){
      System.out.println("YelloMouseWolf eat...")
   }
}

多态的常用方法:

1.把多态用在方法参数上,形参可以是父类引用,实参可以传子类对象。

m(A a):可以用A的任何子类对象作为参数

2.把多态用在方法的返回值上

A m():m方法完全可以返回A的某个子类对象

public class TestPloy{
   public sataic void main(String[] args){
      Dog d=new Dog();
 m1(d);
 Cat c=new Cat();
 m1(c);
 
 Animal a1=m2(10);
 Animal A2=m2(11);
     }
static void m1(Animal a){//多态用在方法的参数上
   a.eat();
}
static Animal m2(int k){//多态用在方法的返回值上
   if(k%2==0) return new Dog();
      else return new Cat();
      }
}
class Animal{
   public void eat(){
   }
}
class Dog extends Animal{
   public void eat(){
      System.out.println("Dog eat...")
   }
}
class Cat extends Animal{
   public void eat(){
      System.out.println("Cat eat...")
   }
}

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

多态的作用 的相关文章

  • 在Java Servlet中获取通过jquery ajax发送的参数[重复]

    这个问题在这里已经有答案了 我在网上搜索这个主题 但找不到有效的示例 我会很高兴有人能给我帮助 这就是我测试的 ajax url GetJson type POST dataType json contentType application
  • 来自行号的方法名称

    给定特定类源代码 Java C 的行号 是否有一种简单的方法来获取它所属的方法的名称 如果它落入其中 大概使用抽象语法树 这对于将 checkstyle 的输出限制为仅触及的方法很有用 我假设您必须使用抽象语法树来执行 Line gt Me
  • 从 Android 函数更新 Textview

    有人可以告诉我如何从函数更新 Android Textview 控件吗 我在互联网上进行了深入搜索 看到很多人都问同样的问题 我测试了线程但无法工作 有人有一个简单的工作示例吗 例如 调用一个函数 在循环中运行多次 并且该函数在 TextV
  • 如何将webview内容划分为多个页面

    我必须使用 Android 上的 PdfDocument 从 webView 创建 PDF https developer android com reference android graphics pdf PdfDocument htm
  • openFileOutput 在单例类中无法正常工作 - 想法/解决方法?

    作为一名 Android 开发新手 我遇到了一些奇怪的问题 我想创建一个类 它方法其他类 活动 任何可以用于以某种特殊方式处理文件的类 假设为了简单起见 我们将记录一些内容 如果我在活动中执行以下操作 例如在 OnClick 侦听器中 则一
  • 如何重复一段文本中的每个字母?爪哇语

    就像在口吃中一样 如果文本为 dean 并且乘数为 3 则结果将是 dddeeeaaannn 由提供的乘数指定的次数 public static void repeatLetters String text dean int n 3 Str
  • 清空变量不会使方法引用无效[重复]

    这个问题在这里已经有答案了 为什么代码不抛出NullPointerException当我使用与变量绑定的方法引用时dog我后来分配了null to 我正在使用 Java 8 import java util function Functio
  • 用于制作代码编辑器的 JavaFX 相当于 JSyntaxPane 的什么?

    以前在 Swing 中 我使用过JSyntaxPane用于制作一个小型 Java 源代码编辑器 为了练习 我决定用 JavaFX 重做整个项目并添加对更多语言的支持 最好是尽可能多 不过好像没有什么类似的JSyntaxPane 一些研究让我
  • 如何使用 aether 从 Java 找到最新版本的 Maven 工件?

    他们的文档非常薄弱 我无法弄清楚 我找到了部分答案here https stackoverflow com questions 27428068 how to retrieve the latest also snapshot versio
  • 我的 Kafka 流应用程序刚刚退出,代码为 0,什么也不做

    为了尝试 Kafka 流 我这样做了 public static void main String args final StreamsBuilder builder new StreamsBuilder final Properties
  • 扩展多个类

    我知道 Java 不支持多重继承 因为不允许扩展多个类 我只是想知道我的问题是否有解决方法 我有一个名为CustomAction需要扩展两个抽象类 BaseAction and QuoteBaseAction 我无法更改这些抽象类中的任何一
  • 从字符串中删除重音符号

    Android 中有没有什么方法 据我所知 没有 java text Normalizer 可以从字符串中删除任何重音 例如 变成 eau 如果可能的话 我想避免解析字符串来检查每个字符 java text NormalizerAndroi
  • java绕中心旋转矩形

    我想围绕其中心点旋转一个矩形 它应该保留在应该绘制的位置并在该空间中旋转 这是我的代码 AffineTransform transform new AffineTransform transform rotate Math toRadian
  • 如何在 JmsMessagingTemplate.sendAndReceive 上设置等待超时

    我在 MVC 控制器中使用 JmsMessagingTemplate 的 sendAndReceive 但如果没有发送回复消息 它似乎会永远等待回复 该文档指出 返回 回复 如果无法接收消息 例如由于超时 则可能为 null 然而 我只是不
  • 在 Eclipse RCP 应用程序中禁用插件贡献

    我经常遇到这个问题 但尚未找到解决方案 每当我编写一个新的基于 Eclipse RCP 的应用程序并包含来自 Eclipse 平台的插件时 我都会 继承 其中一些插件的 UI 贡献 大多数贡献 菜单项 键盘快捷键 属性页 都很有用 但有时我
  • 如何在 JASPIC 中保存经过身份验证的用户?

    我开发了一个安全认证模块 SAM 并实现了validateRequest方法 我还有一个简单的 Web 应用程序配置为使用此 SAM In my validateRequest方法 我检查 clientSubject 并设置一个Caller
  • 向Java类库添加函数

    我使用的 Java 类库在很多方面都不完整 有很多类我认为应该内置其他成员函数 但是 我不确定添加这些成员函数的最佳实践 让我们调用不足的基类A class A public A long arbitrary arguments publi
  • 如果 Modelmapper 中的整个属性为空,如何排除它们

    ModelMapper 是否 http modelmapper org http modelmapper org 支持什么排除属性 如果该值为空 我刚刚找到了 PropertyMap 但这对我来说是一种限制 因为我必须描述我想要的特定属性
  • FetchType.LAZY 不适用于休眠中的 @ManyToOne 映射

    简而言之 我的 Child 类与 Parent 类之间存在多对一的关系 我想加载所有的孩子 而不必加载他们的父母详细信息 我的孩子班级是 Entity public class Child implements Serializable I
  • Graphics2D setfont() 严重减慢了 java 应用程序的启动速度

    我正在用java制作一个游戏 它每秒刷新60次 每次执行循环时 我都会使用 g2d 来绘制图像和字符串 如果我这样做的话一切都会很好g2d setFont new Font Arial Font PLAIN 8 和抽绳 这将是正常的 但如果

随机推荐

  • 跨库的触发器

    CREATE TRIGGER addtomsgdown ON dbo TABLE1 FOR INSERTASdeclare usernumber as varchar 11 declare messagecontent as varchar
  • Figma 常用功能及快捷键

    Figma 常用功能及快捷键 参考视频 https www bilibili com video BV1Da4y177ks t 27 Figma 快捷键 https figmacn com resource all figma shortc
  • C语言 自己的杂记,随便写的,备忘用

    C语言的主函数声明 int main int argc char argv 或者 int main void 指针 int foo 并不是生命一个名为 foo的变量 变量是foo foo的类型是 指向int的指针 int foo bar 并
  • 4、、多变量线性回归(Linear Regression with Multiple Variables)

    4 1 多维特征 目前为止 我们探讨了单变量 特征的回归模型 现在我们对房价模型增加更多的特征 例如房间数楼层等 构成一个含有多个变量的模型 模型中的特征为 x1 x2 xn 增添更多特征后 我们引入一系列新的注释 n 代表特征的数量 x
  • 第二十六章 登录检验解决⽅案 JWT

    单机tomcat应 登录检验 sesssion保存在浏览器和应 服务器会话之间 户登录成功 服务端会保存 个session 当然客户端有 个sessionId 客户端会把sessionId保存在cookie中 每次请求都会携带这个sessi
  • ctfshow web224 sql_文件上传产生sql注入 详解

    sql 文件上传产生sql注入 首先是扫描 或者 直觉检查 有个robots txt 访问这个页面 发现可以重置密码 重置后admin登录 是个文件上传 测试下来不是文件上传的漏洞 题目也是提示的sql 我这里建了个bmp的文件可以成功上传
  • API接口及apipost,postman的基本使用

    一 简介 接口是 前后端通信的桥梁 被称为 API接口 这里的接口指的是数据接口 一个接口就是 服务中的一个路由规则 根据请求响应结果 给客户端返回结果时 一般是JSON格式的 接口的作用 实现前后端通信 一般接口由一下几个部分组成 请求方
  • Shiro使用redis作为缓存(解决shiro频繁访问Redis)(十一)

    原文地址 转载请注明出处 https blog csdn net qq 34021712 article details 80791219 王赛超 之前写过一篇博客 使用的一个开源项目 实现了redis作为缓存 缓存用户的权限 和 sess
  • 一份完整的HTML模板文件、HTML中容易被忽略的基础知识点

  • Apache HBase API及备份与还原

    一 Apache HBase API Apache HBase也适用于多个外部API 有关更多信息 请参阅Apache HBase外部API 将在下一节的内容中介绍 有关使用本机HBase API的信息 请参阅User API Refere
  • Java 日期时间类的简单介绍及运用

    Date类 1 简介 java util Date类 表示特定的瞬间 精确到毫秒 构造方法 public Date 分配Date对象并初始化此对象 以表示分配它的时间 精确到毫秒 public Date long date 分配Date对象
  • 【Unity】URP渲染管线下代码获取相机的Volume Mask属性

    步骤 1 引用URP的命名空间 2 获取摄像机 3 通过URP扩展获取Volume Mask属性 附 层级的相关代码 Reference 1 引用URP的命名空间 using UnityEngine Rendering Universal
  • SVN的备份与还原

    文章目录 操作环境及相关指令 操作环境 相关指令 防火墙相关指令 端口号相关指令 SVN相关指令 文件传输 备份与还原 备份 SVN相关配置信息 SVN软件安装 还原 访问 SVN地址重定向 操作环境及相关指令 操作环境 操作系统 root
  • SPI技术-JDK实现

    SPI是什么 SPI全称Service Provider Interface 是Java提供的一套用来被第三方实现或者扩展的API 它可以用来启用框架扩展和替换组件 Java SPI 实际上是 基于接口的编程 策略模式 配置文件 组合实现的
  • OpenSSL创建生成CA证书、服务器、客户端证书及密钥

    使用OpenSSL创建生成CA证书 服务器 客户端证书及密钥 目录 使用OpenSSL创建生成CA证书 服务器 客户端证书及密钥 一 生成CA证书 二 生成服务器证书 三 生成客户端证书 四 测试 本片博客对对应资源下载 免积分 https
  • js轮播图的制作详细过程

    JS轮播图 1 在body里面写简单的HTML代码 首先在顶部head标签里引入外部CSS和JS 注意要引入JQuery库 并且放在所写的js上面 不然不会有效果 然后在一个div中包裹两个url 第一个用于显示图片 第二个用于定义页码 代
  • 数据结构——>栈

    栈 栈的介绍 栈的应用场景 栈的代码实现 实现栈的思路分析 入栈 出栈 遍历栈 栈的介绍 1 栈是一个先入后出的有序列表 想象成弹夹 2 变化的一端为栈顶 固定的一端为栈底 3 入栈演示图 4 出栈演示图 栈的应用场景 1 递归 2 四则运
  • Linux系统ioctl使用示例 ioctl实验

    本文是我在andoid实验的ioctl的功能 如双向传递参数 贴出来希望对学习ioctl的人很有帮助 linux的ioctl功能是很强大的 android显示模块还有camera模块都离不开ioctl让上层和内核交互 这个实验对初学者很有帮
  • malloc 背后的虚拟内存 和 malloc实现原理

    面试的时候经常会被问到 malloc 的实现 从操作系统层面来说 malloc 确实是考察面试者对操作系统底层的存储管理理解的一个很好的方式 涉及到虚拟内存 分页 分段等 下面逐个细说 1 虚拟内存 首先需要知道的是程序运行起来的话需要被加
  • 多态的作用

    对象的上转型对象体现了多态 多态的作用 将不同的子类对象统一看做父类 屏蔽了不同子类之间的差异 有子类到父类 有特殊到一般 是程序变得通用 public class TestPloy public sataic void main Stri