day14 引用数组类型

news2024/12/24 7:15:38

向上造型

计算机   编译过程 和运行过程

Pet pet = new Cat(); 

图中 pet.eat()为父类构造方法 、  pet.catchMouse()为子类方法

向上造型构成对象不能调用子类独有方法  

出现方法重写会调用子类方法

向下造型

 Cat cat1 = (Cat)new Pet   这种形式错误,不应出现

正确向下造型应该是

Pet pet = new Cat();

Cat cat2 = (Cat)pet;

这时可以应用子类方法

引用类型的数组类型对象

Dog[] dog = new Dog[2];
dog[0] = new  Dog("大巴",5,"蓝色");
dog[1] = new Dog("大黑",6,"蓝噻");
for (int i = 0; i < 2; i++) {
    System.out.println(dog[i]);
}
for (Dog dog1 : dog) {
    System.out.println(dog1.name+dog1.coatColor+dog1.age);
}
public class Dog  {
    String name;
    int age;
    String coatColor;



    public Dog() {
    }

    public  Dog(String name, int age, String coatColor) {
        this.name = name;
        this.age = age;
        this.coatColor = coatColor;
    }
public String getName() {
    return name;
}

public void setName(String name) {
    this.name = name;
}

public int getAge() {
    return age;
}

public void setAge(int age) {
    this.age = age;
}

public String getCoatColor() {
    return coatColor;
}

public void setCoatColor(String coatColor) {
    this.coatColor = coatColor;
}

引用类数组类型的  定时创建  随机子类对象

package com.poloymorphic.extendsx;

//import com.oracleday14.Dog;

import java.util.Arrays;
import java.util.Random;
import java.util.Timer;
import java.util.TimerTask;

/**
 * 多态
 * 向上造型
 */
public class ExtendsDemo {

//        Cat cat = new Cat();
//
//        /**
//         *   创建对象时,编译首先  读到  Pet  pet
//         *   确定声明创建是一个Pet类型的对象
//         *   然后检查后面实际创建的类与声明创建的类是否有继承关系
//         *   有继承关系时编译通过  不会去管具体实际创建的子类到底是哪些
//         *   也就不知道有哪些子类具体的独有方法
//         *   只会调用继承了的父类的方法
//         *
//         */
//        Pet pet = new Cat();
//        //父类型的引用调用子类型的对象 叫做向上造型
//        pet.eat();
        pet.catchMouse();
//        //调用子类方法
//        //调用不了子类独有的方法
//
//
        Cat cat1 = (Cat)new Pet(); //类型不匹配异常
//        //子类型的引用指向父类型的对象  向下造型
//        Pet pet1 = new Pet();
//        Cat cat2 = (Cat)  pet;

//        Pet pets[] = {
//                new Cat(),
//                new Rabbits(),
//                new Dog(),
//                new Cat(),
//                new Dog(),
//                new Rabbits(),
//        };

//        for (int i = 0; i < pets.length; i++) {
//            if (pets[i] instanceof Dog) {
//                Dog dog = (Dog)pets[i];
//                dog.eat("骨头");
//            }else if (pets[i] instanceof Cat) {
//                Cat cat = (Cat)pets[i];
//                cat.eat("猫粮");
//            }else if (pets[i] instanceof Rabbits){
//                Rabbits rabbits = (Rabbits) pets[i];
//                rabbits.eat("萝卜");
//            }
//        }

        private Pet pets[] = {};     //自定义数组长度
//        Pet pets[] = new Pet[20];
    public Pet[] creatPets(){
        Arrays.copyOf(pets,pets.length+1);
        //每次调用creatPet数组  数组长度加1   创造一个新的pet对象
        Random random = new Random();
        for (int i = 0; i < pets.length; i++) {
            int n = random.nextInt(20);
            if (n <= 4){
                pets[i] = new Dog();
            }else if( n<= 12){
                pets[i] = new Rabbits();
            }else if (n <= 19){
                pets[i] = new Cat();
            }
        }
        //遍历for循环给声明的pet类型创建一个子类对象

        return pets;
        //creatPets给定一个返回值
    }

    /**
     *   遍历循环输出数组
     */
        public void printPet(Pet petss[]){
        for (Pet pet : petss) {
            System.out.println(petss);
        }
    }




    public static void main(String[] args) {
            ExtendsDemo exdemo = new ExtendsDemo();

            //创建定时器对象
        Timer timer = new Timer();

        timer.schedule(new TimerTask(){
            @Override
            public void run(){
                exdemo.creatPets();
                exdemo.printPet(exdemo.pets);
            }



        },0,1000);
    }


}





class Pet {
    String name;
    int age;
    String color;

    public void eat() {
        System.out.println("在吃东西");
    }
}


class Cat extends Pet {
    public void catchMouse() {
        System.out.println("抓老鼠");
    }


    public void eat(String food) {
        System.out.println("🐱吃"+food);
    }
}


class Dog extends Pet {

    public void bark() {
        System.out.println("叫唤");
    }
    public void eat(String food) {
        System.out.println("狗子吃" + food);
    }
}

class Rabbits extends Pet {

    public void eat(String food) {
        System.out.println("兔子吃" + food);
    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/850732.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

FortiGate防火墙日志审计运维

环境介绍 CPU&#xff1a;8核&#xff0c;内存&#xff1a;16GB&#xff0c;硬盘&#xff1a;100GB 操作系统版本&#xff1a;CentOS-7-x86_64-DVD-2003 平台版本&#xff1a;鸿鹄2.7.0 安装组件 安装环境支持确认 鸿鹄计算引擎使用了 AVX2 高级指令集做向量计算加速&#xf…

Python SQLAlchemy ( ORM )

From Python中强大的通用ORM框架&#xff1a;SQLAlchemy&#xff1a;https://zhuanlan.zhihu.com/p/444930067Python ORM之SQLAlchemy全面指南&#xff1a;https://zhuanlan.zhihu.com/p/387078089 SQLAlchemy 文档&#xff1a;https://www.sqlalchemy.org/ SQLAlchemy入门和…

STM32F103——GPIO八种工作模式

目录 1、GPIO 基本结构分析 2、GPIO 八种工作模式 2.1 输入浮空 2.2 输入上拉 2.3 输入下拉 2.4 模拟功能 2.5 开漏输出 2.6 开漏式复用功能 2.7 推挽输出 2.8 推挽式复用功能 3、GPIO 八种工作模式特点及应用 1、GPIO 基本结构分析 STM32F103的 GPIO 工作有八种…

Vue.js2+Cesium1.103.0 七、Primitive 绘制航线元素

Vue.js2Cesium1.103.0 七、Primitive 绘制航线元素 用 Primitive 绘制航线元素&#xff0c;包括航点图标&#xff0c;航线线段&#xff0c;线段距离标注&#xff0c;航点序号&#xff0c;海拔标注&#xff0c;总航程等信息。 可同时绘制多条航线&#xff1b;可根据 id 清除指…

【LeetCode】数据结构题解(11)[用队列实现栈]

用队列实现栈 &#x1f609; 1.题目来源&#x1f440;2.题目描述&#x1f914;3.解题思路&#x1f973;4.代码展示 所属专栏&#xff1a;玩转数据结构题型❤️ &#x1f680; >博主首页&#xff1a;初阳785❤️ &#x1f680; >代码托管&#xff1a;chuyang785❤️ &…

PHP最简单自定义自己的框架定义常量自动生成目录(三)

1、框架入口增加模块定义&#xff0c;实现多模块功能 index.php 定义模块 <?php //定义当前请求模块 define("MODULE",index); require "./core/KJ.php"; 创建后台模块admin.php <?php define("MODULE",admin); require "./cor…

在家构建您的迷你聊天Chat gpt

推荐&#xff1a;使用 NSDT场景编辑器 助你快速搭建可编辑的3D应用场景 什么是指令遵循模型&#xff1f; 语言模型是机器学习模型&#xff0c;可以根据句子的前一个单词预测单词概率。如果我们向模型请求下一个单词&#xff0c;并将其递减地反馈给模型以请求更多单词&#xff…

《Linux运维实战:Docker基础总结》

一、简介 1、docker的基本结构是什么&#xff0c;包含哪些组件&#xff1f; docker的基本机构是c/s模式&#xff0c;即客户端/服务端模式。 由docker客户端和docker守护进程组成。docker客户端通过命令行或其它工具使用docker sdk与docker守护进程通信&#xff0c;发送容器管理…

SaaS系统相比传统软件,为何数据更安全?

随着云计算、5G等技术的不断进步&#xff0c;SaaS行业步入了快速发展的阶段&#xff0c;应用场景也日趋多元化。预计2023年底&#xff0c;中国SaaS行业市场规模将达到555.1亿元。 中研网对于SaaS发展态势预测这样评价&#xff1a; 当前&#xff0c;我国在多个维度上具备发展 S…

Mysql主从搭建 基于DOCKER

创建目录 #主节点目录 mkdir -p /home/data/master/mysql/#从节点目录 mkdir -p /home/data/slave/mysql/创建配置文件 # 主节点配置 touch /home/data/master/mysql/my.cnf# 从节点配置 touch /home/data/slave/mysql/my.cnf编辑配置文件 主节点配置文件 vim /home/data/m…

【ChatGPT】自我救赎

ChatGPT辅助学习C之【在C中如果大数据类型转小数据类型会发生什么呢?】&#xff0c;今天问ChatGPT一个问题&#xff0c;让它解析下面这个C程序&#xff1a; #include <iostream> #include <cstdio> using namespace std; int main() {int a;long long b532165478…

haproxy基本编译环境部署

前提&#xff1a;haproxy支持基于lua实现功能扩展&#xff08;需要安装比较新的lua语言&#xff0c;方便进行haproxy编译&#xff09;。 wget http://www.lua.org/ftp/lua-5.3.5.tar.gz lua -v # 检查环境 yum list lua # 查看可以安装环境 同时还需要gcc&#xff0c;gcc-c&…

rocketMq消息队列详细使用与实践整合spring

文章目录 一、RocketMQ原生API使用1、测试环境搭建2、RocketMQ的编程模型3、RocketMQ的消息样例3.1 基本样例3.2 顺序消息3.3 广播消息3.4 延迟消息3.5 批量消息3.6 过滤消息3.7 事务消息3.8 ACL权限控制 二、SpringBoot整合RocketMQ1、快速实战2、其他更多消息类型&#xff1a…

CSS实现图像填充文字

效果如下 具体代码&#xff1a; <!DOCTYPE html> <html><head><meta charset"utf-8"><title>CSS图像填充文字</title><style>.text {background-image: url(./imgs/1.webp);/* 一定要让背景透明&#xff0c;这样后面的背…

Linux使用mount挂载

authordaisy.skye的博客_CSDN博客-嵌入式,Qt,Linux领域博主 格式化分区 sudo mkfs -t ext4 /dev/mmcblk0p1 格式化分区 实际使用中推荐这个&#xff0c;它是 mkfs 命令的个变种&#xff0c;可以自动识别文件系统类型为 ext4&#xff0c;并使用 ext4 文件系统的默认参数来创建…

【源码篇】ArrayList源码解析

文章目录 ArrayList源码解析1、ArrayList简介2、ArrayList继承关系2.1 Seralizable接口2.2 Cloneable接口2.3 RandomAccess接口 3、源码解析3.1 构造方法源码解析3.1.1 无参构造源码解析3.1.2 有参构造源码解析 3.2 add方法源码解析3.2.1 add(E e)方法源码解析3.2.2 add(int in…

Azure通过自动化账户实现对资源变更

Azure通过自动化账户实现对资源变更 创建一个自动化账户第一种方式 添加凭据&#xff08;有更改资源权限的账户&#xff0c;没有auth认证情况&#xff09;创建一个Runbook&#xff0c;测试修改 AnalysisServices 定价层设置定时任务&#xff1a;开始定时任务&#xff1a; 第二种…

Redis基础 (三十八)

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 目录 前言 一、概述 1.1 NoSQL 1.2 Redis 二、安装 2.1 安装方式 &#xff1a; 三、目录结构 3.1 rpm -ql redis 3.2 /etc/redis.conf 主配置文件 3.3 /var/lib/redis …

【MATLAB第68期】基于MATLAB的LSTM长短期记忆网络多变量时间序列数据多步预测含预测未来(非单步预测)

【MATLAB第68期】基于MATLAB的LSTM长短期记忆网络多变量时间序列数据多步预测含预测未来&#xff08;非单步预测&#xff09; 输入前25个时间&#xff0c;输出后5个时间 一、数据转换 1、原始数据 5列时间序列数据&#xff0c;70行样本 705 数据矩阵结构 2、数据转换 将…

MySQL的查询方法

单表查询 素材&#xff1a; 表名&#xff1a;worker-- 表中字段均为中文&#xff0c;比如 部门号 工资 职工号 参加工作 要求&#xff1a; 1、显示所有职工的基本信息。 2、查询所有职工所属部门的部门号&#xff0c;不显示重复的部门号。 3、求出所有职工的人数。 4、…