day12_static_多态

今日内容

零、 复习昨日
一、final
二、static
三、多态
四、向上转型&向下转型
五、多态应用

零、 复习昨日

0 类封装步骤

  • 属性私有private
  • set,get方法

1 继承的好处

  • 减少重复
  • 多态的前提条件

2 子类可以使用父类什么

  • 子类可以使用父类 非私有 属性和方法

3 方法重写的要求

  • 访问修饰符 >= 父类
  • 返回值类型要与父类一致
  • 方法名要一致
  • 参数列表一致

4 访问修饰符的权限大小
public>protected>缺省>private

5 this和super 总结表格

  • this不代表父类对象!!!
  • 表格见笔记

6 有继承时创建对象的过程

  • 先父类, 再属性初始化 后执行构造
  • 后子类, 再属性初始化 后执行构造

一、作业

重要作业,需要花10分钟尝试一遍,如果不会写

  • 记当时自己心路历程,尽可能完整
  • 等我讲的是时候 重点听

见项目包com.qf.pdf6_t19和com.qf.pdf6_t24

二、final

修饰符,用来修饰类,属性和方法

2.1 修饰类

final修饰类,类不能被继承

image-20240130103351871

2.2 修饰变量

final修饰成员变量,局部变量,变量不再变化,即变成常量!!

image-20240130103817632

注意: 命名规范要求

  • 变量命名是首字母小写,其余单词大写!
  • 常量命名是全部大写,多个单词中间_分开

2.3 修饰方法

final修饰方法,方法不能被 重写!!

image-20240130104142405

2.4 总结

不管修饰类,变量,方法,其实本质是一样,因为final 单词,释义 最终,最后的

所以

  • 最后的类,不能被继承
  • 最后的变量,不能改变
  • 最后的方法,不能重写

2.5 练习

 public static void main(String[] args) {final Dog[] dogs = new Dog[3];dogs[0] = new Dog();// 数组内部的东西是可以改变的dogs[0] = new Dog();// dogs本身引用不能再改变// dogs = new Dog[4];final Dog dog = new Dog( );dog.name = "大黄";// 对象内的属性是可以变的dog.name = "小黄";// dog = new Dog(); // 对象的引用不能变}

三、static

3.1 语法解释

:写法: static修饰符,修饰类,属性和方法,

一般常见,常用的是修饰属性 和 方法


特性:

  • 凡是被static修饰的属性,方法会随着 类加载 而初始化
  • 凡是被static修饰的属性,方法在内存只有一份,被当前类的所有对象共享
    • static修饰的属性和方法称为类方法,类属性(属于类)
    • 没有被static修饰的属性和方法称为对象方法,对象属性(属于对象)

特殊用法:

  • 因为static修饰的属性和方法会随着类加载而初始化,即
    • 不需要创建对象,属性和方法即可使用!!!
  • 静态方法不能调用非静态属性和方法
    • 是因为静态是随着类加载就出现,而对象是new的时候才出现的,即有静态不一定有对象

image-20240130111915728

3.2 用法

用法1: 设计的方法为了方便调用的时候,可以设计成静态方法

  • 例如: Arrays.sort() Arrays.toString()

用法2: 设计的程序中属性需要被多个对象共享时,可以将属性设置成静态 的

  • 例如: 多个窗口要共享火车票数据, 多个学生要共享老师对象

用法3: static一般会配合final,去修饰静态 常量

例如:

 public static final double PI = 3.14159265358979323846;

ps: public static final这三个修饰符顺序原则上怎么写都行,但是建议是按照public static final顺序

三、多态

3.1 什么是多态

生活多态: (多种形态)

  • 蝌蚪–>青蛙
  • 迪迦(蓝色,红色,红蓝)
  • 铁甲小宝

代码的多态:(主要是指方法多种表现形式)

  • 同一个对象的同一个方法会出现不同的结果

3.2 如何形成多态

想要形成多态,要同时满足前提

  • 先有继承(子父类关系)
  • 重写方法
  • 父类引用指向子类对象(向上转型)

// 父类

image-20240130144816777

// 子类

image-20240130144831085

// 向上转型,展现多态

image-20240130144903551

3.3 作用?好处?

多态可以让代码很灵活,扩展性强!减少耦合度!

举例: 现有需求,设计方法,传入对应的动物对象,展现对应动物的吃的行为

如果没有多态,此题该怎么写?如下

image-20240130145414355

再扩展一下: 现在动物园来了一个新动物,也要展现其吃的行为,怎么办?

此时需要,再修改代码,单独加一个方法来适应这个新动物!!!

image-20240130145644404

此时,思考!!! 如果有很多新动物??? 要设置很多新的方法, 不灵活,扩展性差!


这时 利用多态,此题非常简单, 做到以不变应万变!!!

image-20240130151248849

3.4 练习

改造形状题目为多态

创建一个长度为3 的数组,里面有三个不同 类型的对象,分别打印这三个对象的周长和面积。

四、向上转型&向下转型

父类引用指向子类对象,就是向上转型(子对象变父对象)

什么时候需要向上转型,想要表现多态的时候就可以向上转型!

image-20240130154943043

向下转型(父对变子对象),父类对象指向子类引用!

       /*** 向下转型* 以下这都是向下转型,但是第一遍会失败* 第二遍这个成功!* --------* 为什么?*  要想向下转型成功,得向上再向下*/// Animal animal2 = new Animal();// Dog dog = (Dog) animal2;// 不行!!Animal animal3 = new Dog();// 先向上Dog dog = (Dog) animal3;// 再向下,能转成
// ps: 这些其实就是之前的类型转换问题

为什么需要向下转型?

  • 需要调用子类特有的方法

场景: 猪狗猫等类都有共同的方法:eat(),此时每一个动物还有不同的特有的方法,要表现出来

image-20240130161040471

但是这样可以调用狗类特有方法,但是不适用,因为其他动物不能转为Dog类,怎么解决?

  • 思路: 判断这个animal是哪个子类对象向上转型,我再对应的向下转型为哪个子类
  • 利用jdk提供 instanceof方法来判断animal是哪个类的实例

image-20240130161629284

练习

pdf6_t14

五、多态应用

场景1: 方法的参数列表是父类,调用该方法时,传入子类,方法表现出子类特点

image-20240130164809782

场景2: 设计父类型数组,存储子类对象元素

image-20240130164901276

image-20240130164913402

场景3: 方法的返回值类型是父类,但是return的值是子类

image-20240130165351976

六、总结

final

  • 修饰类,不能继承
  • 修饰变量,变量为常量,注意变量的命名
  • 修饰方法,方法不能重写

static

  • 静态的方法和属性,可以通过类名直接调用,不用创建对象
  • 静态的方法和属性,在内存只有一个,会共享

多态

  • 多态的前提(继承,重写,向上转型)
  • 多态好处: 扩展,方便
  • 记住常用的应用场景
  • 记住一句话: 编译看父类,运行看子类
  • 了解向下转型(其实就是类型转换)

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

幻兽帕鲁(Palworld)v0.1.3免安装中文版(下载及配置中文及服务器搭建)

配置中文 进入到游戏文件夹中 Palworld.v0.1.3.0\game\Engine\Binaries\ThirdParty\Steamworks\Steamv153\Win64\steam_settings设置中文 simplified chinesewindows搭建服务器 要求 中央处理器4核(推荐)内存16千兆字节(GB) …

IMX6LL|打造自己的驱动总线

xbus:打造自属的驱动总线 驱动总线 软件与硬件代码分离,提高程序的复用性 device–关联硬件代码driver_devices–关联软件代码bus_type–统一管理、设置match匹配规则 设备驱动模型体现分离思想 bus-xbus-devices-drivers 总线管理 buses_init()函…

移动Web——平面转换-旋转

1、平面转换-旋转 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Document</title><style…

我该坚持纯正原创?还是随波逐流做搬运作者?

本文可能不是一个热点文章&#xff0c;甚至可能不是一个网创者该关心的文章&#xff0c;但是阿阳真心希望&#xff0c;大家可以静下心来看看。 阿阳在网赚领域混了差不多十年&#xff0c;这么多年也经历不少。我不想吹嘘什么&#xff0c;可能是因为年纪大了&#xff0c;觉得低调…

晶体塑性有限元 Abaqus 三维泰森多边形(voronoi模型)插件 V8.0

更多内容见公众号“320科技工作室”&#xff0c;有需要欢迎通过公众号联系我们。

辽宁链家新房数据采集与可视化实现

摘 要 网络爬虫也叫做网络机器人&#xff0c;是一种按照一定的规则&#xff0c;自动地抓取网络信息&#xff0c;进行数据信息的采集与整理的程序或者脚本。随着海量数据的出现&#xff0c;如何快速有效的获取到我们想要的数据成为难题。以房源信息为例&#xff0c;该文使用Pyt…

Buffer缓冲区类设计实现

目录 类设计理念 类设计接口函数 类设计函数实现 测试 正常读取与写入 相同类型拷贝 扩容测试 按行读取 类设计理念 类设计接口函数 #include <vector> #include <cstdint>#define BUFFER_DEFAULT_SIZE 1024 // Buffer 默认起始大小 class Buffer { pr…

LeetCode —— 137. 只出现一次的数字 II

&#x1f636;‍&#x1f32b;️&#x1f636;‍&#x1f32b;️&#x1f636;‍&#x1f32b;️&#x1f636;‍&#x1f32b;️Take your time ! &#x1f636;‍&#x1f32b;️&#x1f636;‍&#x1f32b;️&#x1f636;‍&#x1f32b;️&#x1f636;‍&#x1f32b;️…

一二三应用开发平台文件处理设计与实现系列之7——minio多节点共享磁盘模式验证

背景 在不了解minio架构设计之前&#xff0c;我根据既往经验推测minio是将文件读写封装实现了一个应用系统&#xff0c;如要实现高可用&#xff0c;则需要部署两个minio节点&#xff0c;共享同一块磁盘。两个minio节组成一个集群&#xff0c;使用nginx实现负载均衡&#xff0c…

Python下载安装与环境配置

本文将指导您完成Python的下载、安装以及环境配置过程&#xff0c;确保您在编写和运行Python代码时能够获得最佳体验。我们将提供详细的步骤和代码示例&#xff0c;帮助您顺利完成设置。 一、Python下载与安装 访问Python官网&#xff1a;首先&#xff0c;您需要访问Python的官…

通俗易懂三大范式

通俗易懂三大范式 第一范式说的是每个字段不可再分 第二范式说的是不能存在部分依赖&#xff08;不能由联合主键的部分就可以推出其他字段&#xff0c;必须整个联合主键才能推出其他字段&#xff09; 第三范式说的是不能存在间接依赖(A&#xff08;主键&#xff09;→B,B→C…

学习嵌入式第十五天之结构体

用变量a给出下面的定义 a) 一个整型数&#xff08;An integer&#xff09; //int a;b) 一个指向整型数的指针&#xff08;A pointer to an integer&#xff09; //int *a;c) 一个指向指针的的指针&#xff0c;它指向的指针是指向一个整型数&#xff08;A pointer to a poin…