多态的应用

news/2024/10/22 18:36:03/

多态的应用

1.多态的构建:

​ 自我理解:就是 父类引用指向子类对象。

功能 : 父类能调用父类对应子类的方法和属性,但是都是优先调用 重写的方法 或 子类的属性!

创建子类构造器,就是先进入子类构造器,然后默认第一行进入父类构造器:

1.这里先创建父类的对象,给父类对象赋值,或者不赋值就是默认值,把父类的属性继承给子类。

2.接着回到子类构造器,给子类构造器进行赋值,如果和父类属性重复,子类会把父类属性的值给覆盖

3.最后判断子类还有没有 没有 进入构造器的属性,如果有,就是默认值,若与父类属性重复,将会把默认值覆盖父类属性的值。

4.最后完成构造,创建子类的的对象,并且合并刚刚的父类构造,该检查过的都检查过了,该覆盖的都覆盖了,不会在有重复的属性了,接下来就是两个对象结合,形成一个新的子类对象。

并把这个对象的地址,用父类接收,也就是我们所说的,父类指向子类的对象。

注意:1.父类不能用子类独有的方法,但是经过子类重写的方法,优先调用重写的方法。

​ 2.父类接收其实是指:子类的父类形态,从父类看过去,就是父类中子类的形态,抽象一点就是和一面镜子一样!

2.多态的应用:

接下来将是多态的两种应用:

  1. 将父类作为参数进行多态!可以传递任意一个子类对象
  //喂宠物的方法public void feed(Animal animal){animal.eat();}
  1. 将父类作为返回值进行多态的应用!可以返回任意一个子类对象

​ 刚刚在Animal父类下创建了eat();方法

并在四种动物,也就是Animal的子类下,重写了四种不同的eat();方法

在测试类里,用多态实现,对各种子类的调用

    //获得宠物的方法public Animal getAnimal(String type){Animal animal=null;switch (type){case "dog":animal=new Dog();break;case "bird":animal=new Bird();break;case "fish":animal=new Fish();break;case "snake":animal=new Snake();break;}return animal;}

最后测试类去实现

package com.qf.extendsTest;import java.util.Scanner;public class DuoTai1 {public static void main(String[] args) {//要调用该类的方法,必须创建该类的对象DuoTai1 duoTai1 = new DuoTai1();Scanner scanner = new Scanner(System.in);System.out.println("请输入你要收养的宠物类型:");String type = scanner.next();//获取子类,把父类引用指向子类的对象Animal animal = duoTai1.getAnimal(type);duoTai1.feed(animal);}//获得宠物的方法public Animal getAnimal(String type){Animal animal=null;switch (type){case "dog":animal=new Dog();break;case "bird":animal=new Bird();break;case "fish":animal=new Fish();break;case "snake":animal=new Snake();break;}return animal;}//喂宠物的方法public void feed(Animal animal){animal.eat();}}

http://www.ppmy.cn/news/79045.html

相关文章

花指令问题

前言 想起之前打题的时候经常会遇到一些关乎花指令的问题,但是没有系统地总结归纳花指令去除的姿势,浅浅开一个坑慢慢来写 题1:简单jmp 可以骗过dbg,但是放在ida中就很容易看出来,无效跳转 题目来源:[HD…

【Android笔记103】Android之自动完成文本框组件(AutoCompleteTextView、MultiAutoCompleteTextView)

这篇文章,主要介绍Android之自动完成文本框组件(AutoCompleteTextView、MultiAutoCompleteTextView)。 目录 一、AutoCompleteTextView组件 1.1、运行效果 1.2、案例代码 (1)布局文件

【C++刷题集】-- day3

目录 选择题 单选 OR59 字符串中找出连续最长的数字串⭐ 【题目解析】 【解题思路】 JZ39 数组中出现次数超过一半的数字⭐ 【题目解析】 【解题思路1】 【解题思路2】 选择题 单选 1、以下程序的输出结果是 ( ) #include <stdio.h> int main() {char a[10] …

CodeForces.1786A2.发牌.[中等][flg标识][数学规律][双色牌]

题目描述&#xff1a; 题目解读&#xff1a; 发牌问题&#xff0c;给两人发双色牌&#xff0c;同样还是 给a发1张&#xff0c;然后给b发2&#xff0c;3张&#xff1b; 给a发4&#xff0c;5张&#xff0c;给b发6&#xff0c;7张&#xff1b; 给a发8&#xff0c;9张&#xff…

mac 切换java jdk版本 java8 java11

1. 终端执行命令 查看本地各版本jdk&#xff1a;mac通常默认安装了jdk1.8 安装目录是 /Library/Java/JavaVirtualMachines/ cd /Library/Java/JavaVirtualMachines/ ls 2. 上述命令列出的各版本目录名 后&#xff0c;在全局配置文件.bash_profile中新增上面命令列出的各…

分布式事务解决方案-Seata

分布式事务解决方案-Seata 1.分布式事务问题1.1.本地事务1.2.分布式事务1.3.演示分布式事务问题 2.理论基础2.1.CAP定理2.1.1.一致性2.1.2.可用性2.1.3.分区容错2.1.4.矛盾 2.2.BASE理论2.3.解决分布式事务的思路 3.初识Seata3.1.Seata的架构3.2.部署TC服务3.3.微服务集成Seata…

3.fabric二进制工具包介绍

(1)Fabric二进制工具包: Fabric二进制工具包:Fabric二进制工具包(Fabric Binary Distribution)是Hyperledger Fabric的核心组件,它包含了一系列可执行的二进制文件,用于搭建、管理和操作Fabric网络。该工具包提供了一套命令行工具,可以执行各种与Fabric网络相关的任务…

5月24日,今日信息差

1、618期间&#xff0c;消费者在淘宝App搜索Apple相关产品&#xff0c;点击有“地址绿标”商品下单购买&#xff0c;最快1小时即可收到相关产品。预计会有60商家1000多款商品支持同城门店发货&#xff0c;覆盖了日立、海信、美的、OPPO、vivo、联想等品牌 2、联想智能手机业务…