day13_oop

news2025/6/17 7:59:52

今日内容

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

零、 复习昨日

  • 封装
    • 类的封装: 1 属性私有 2提供setget
  • 继承
    • A extends B
    • 子类可以使用父类非私有属性和方法
    • 好处: 复用,多态准备
  • 重写/覆写/覆盖/Override
    • 子类重写父类的方法,以适应自己本身
    • 多态准备
  • this super
    • 发现: 在创建子类对象时先创建父类对象
    • 为什么? 默认构造方法第一行有个super()调用父类构造方法
    • super代表父类对象 this 当前对象
    • super() super(实参) super.属性 super.方法
    • this() this(实参) this.属性 this.方法
  • 访问修饰符
    • public > protected > package > private
  • 子父类创建对象的过程
    • new 子类(),但是先super()调用父类构造
    • 父类属性先初始化,后再执行父类构造方法内代码
    • 在子类属性初始化,最后执行子类构造方法内代码
    • 将对象地址赋值给引用

一、final

final 最终最后,修饰符,用来修饰类,属性,方法

final 修饰类,该类不能被继承,即该类不能有子类 (太监类)

image-20230412091650500

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

image-20230412092003468

final 修饰属性/变量,变量变常量,不能被更改

image-20230412092459685

    final int PEOPLE_AGE = 19;
    /**
     * 命名规范:
     *  变量命名驼峰原则: userName
     *  常量命名: 全部大写,多个单词之间使用下划线
     */
public static void main(String[] args) {
        // final 限制了father引用不能再改变
        final Father father = new Father( );
        // 但是不影响对象内部属性的变化
        father.age2 = 19;

        // 即不能像这样,再次引用别的对象
        // father = new Father();
    }

二、static

2.1 特点

static 静态修饰符,修饰属性 ,方法 ,类(静态内部类)

package com.qf.static_;

/**
 * --- 天道酬勤 ---
 *
 * @author QiuShiju
 * @desc
 */
public class Huangniu {
    /**
     * static 修饰的属性在内存只有一份,被该类所有对象共享
     * 即这些静态属性叫做: 类属性,属于类
     * --------------------------------------
     * - static修饰属性和方法,随着类(字节码文件)加载而初始化
     * - static修饰的属性和方法,可以直接通过类名调用,不用对象
     * - static修饰的属性和方法,在内存只有一份,不属于某个对象,而是属于字节码文件
     */
    static int ticketNum = 100;// 许嵩演唱会票

    /**
     * 普通成员变量,即成员属性,每次创建对象,每个对象都有一份属于自己的属性
     * 即这些属性叫做: 对象属性,这些属性属于对象
     */
    String name;


    // 售票
    public void sell(){
        ticketNum--;
        System.out.println("售出一张" );
    }

    // 查余票
    public int getTicketNum(){
        return ticketNum;
    }

    public static void jiao(){
        System.out.println("黄牛叫卖" );
    }

    public static void main(String[] args) {
        Huangniu niu1 = new Huangniu( );// 黄牛
        System.out.println("1售票前"+niu1.getTicketNum( ));
        niu1.sell();// 售票
        System.out.println("1售票后"+niu1.getTicketNum( ));
        niu1.name = "牛1";

        System.out.println("----------" );

        Huangniu niu2 = new Huangniu( );// 黄牛
        System.out.println("2售票前"+niu2.getTicketNum( ));
        niu2.sell();// 售票
        System.out.println("2售票后"+niu2.getTicketNum( ));
        System.out.println(niu2.name );


        System.out.println(Huangniu.ticketNum );
        Huangniu huangniu = new Huangniu( );
    }
}

image-20230412101854393

总结:

  • static修饰属性和方法,随着类(字节码文件)加载而初始化
  • static修饰的属性和方法,可以直接通过类名调用,不用对象
  • static修饰的属性和方法,在内存只有一份,不属于某个对象,而是属于字节码文件
  • 静态方法只能调用静态
  • 静态方法内部不能使用this

2.2 应用

1 当某些数据需要被所有对象共享时,给数据(属性或变量)设置static,例如票

2 当某些方法需要方便调用时,可以将方法设置静态,这样就是通过类名直接调用,而不用创建对象

 		int[] arr = {1,23,4,5,6};
        System.out.println(Arrays.toString( arr) );
        System.out.println(Math.abs(-1));

总结: 有静态修饰就直接使用,没有静态修饰,就创建对象用对象调用

三、多态

生活中的多态: 变形金刚,蝌蚪,铁甲小宝

程序中的多态: 同一个方法,出现不同的结果

多态的出现,要满足三个前提条件:

  • 继承/实现
  • 重写
  • 父类引用指向子类对象(向上转型)

演示

package com.qf.poly;

/**
 * --- 天道酬勤 ---
 *
 * @author QiuShiju
 * @desc
 */
public class TestPoly {

    public static void main(String[] args) {
        // 创建对象
        // 类名 对象名 = new 类名();
        // 类名 引用 = new 构造方法();
        Dog dog = new Dog();

        // 父类引用,指向子类对象(向上转型)
        // Animal animal = new Dog();
        //
        // animal.eat();
        feed(new Dog( ));
        feed(new Cat( ));
        feed(new Pig( ));
        feed(new Tiger( ));

    }

    // 多态改造
    // Animal animal = new Dog( );
    // Animal animal = new Cat( );
    // Animal animal = new Pig( );
    // Animal animal = new Tiger( );
    public static void feed(Animal animal) {
        animal.eat();// 此方法体现出多态效果
        /**
         * 编译看父类
         * 运行看子类
         */
    }


    // 动物园饲养动物
    // public static void feed(Dog dog){// Dog dog = new Dog
    //     dog.eat();
    // }
    //
    // public static void feed(Cat cat) {
    //     cat.eat();
    // }
    // public static void feed(Pig pig) {
    //     pig.eat();
    // }
}

多态应用场景:

  • 方法的参数列表是父类引用
  • 定义一个父类类型数组,存储所有动物,创建Animal[]

多态的好处:

  • 扩展性
  • 解耦合/松耦合
    • 开发原则: 高内聚 低耦合
      {
      // cat.eat();
      // }
      // public static void feed(Pig pig) {
      // pig.eat();
      // }
      }

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

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

相关文章

什么是雪花算法?啥原理?

1、SnowFlake核心思想 SnowFlake 算法,是 Twitter 开源的分布式 ID 生成算法。 其核心思想就是:使用一个 64 bit 的 long 型的数字作为全局唯一 ID。在分布式系统中的应用十分广泛,且 ID 引入了时间戳,基本上保持自增的&#xf…

关于ChatGPT人工智能浅谈

ChatGPT人工智能优点与不足 现今ChatGPT已经向我们展示了其强大的数据收集分析和处理能力,这点随着其不断的学习训练会越来越强。ChatGPT这类生成式人工智能在数据收集分析和处理能力这方面远远超过人类,虽然它目前还不能完全做到按人类的方式对数据进行…

常见的HTTP状态码及其含义

© Ptw-cwl HTTP是一种用于传输超文本数据的协议,在使用Java进行Web开发时,经常会涉及到HTTP状态码。以下是一些常见的HTTP状态码及其含义 概览 状态码含义1xx 信息性状态码指示请求已经被接受或者正在进行处理。100 Continue表示客户端可以继续发…

4月了,准备跳槽的可以看看

金三已经过去了,银四对于想跳槽的职场人来说,绝对要从现在开始做准备了。这时候,很多高薪技术岗、管理岗的缺口和市场需求也出来了。 所以准备4月跳槽、找工作的朋友,就一定要好好准备抓住机会,补一补自己的知识体系&…

第一章节 spring 概念与体系结构

1、Spring 概念 Spring 是 Java EE 编程领域的一款轻量级的开源框架,目标就是要简化 Java 企业级应用程序的开发难度和周期。 1.1、广义 Spring Framework、Spring MVC、SpringBoot、Spring Cloud、Spring Data、Spring Security 项目名称描述Spring DataSpring…

一 注册中心

一 什么是注册中心 注册中心可以说是微服务架构中的“通讯录”,它记录了服务和服务地址的映射关系。在分布式架构中,服务会注册到这里,当服务需要调用其它服务时,就到这里找到服务的地址,进行调用。 当我想给张三打电…

Windows系统管理_windows server 2016 文件系统与权限

文件系统概述 文件系统是操作系统用于明确存储设备(磁盘、固态硬盘)上组织文件的方法。从系统角度来 看,文件系统是对文件存储设备的空间进行组织和分配,负责文件存储并对存入的文件进行保护和 检索的系统。可以将一个文件连续地…

基于多种算法实现鸢尾花聚类

基于多种聚类算法实现鸢尾花聚类 描述 聚类(Clustering)属于无监督学习的一种,聚类算法是根据数据的内在特征,将数据进行分组(即“内聚成类”),本任务我们通过实现鸢尾花聚类案例掌握Scikit-l…

Java阶段一Day20

Java阶段一Day20 文章目录Java阶段一Day20异常throwthrows检测异常和非检测异常常见的RuntimeException常见的catch中的方法(ExceptionAPI)自定义异常网络C/S 和 B/STCP 和 UDP三次握手四次挥⼿教师总结新单词异常处理throw关键字例throws关键字例throws…

python函数详解_INDEX函数

一. 函数的作用 函数就是将一段具有独立功能的代码块 整合到一个整体并命名,在需要的位置调用这个名称即可完成对应的需求。 函数在开发过程中,可以更高效的实现代码重用。 二. 函数的使用步骤 1. 定义函数 def 函数名(参数):代码1代码2...... 复制 …

一些算法知识整理

最近找工作,整理了一些算法知识,希望能帮助到同样在找工作的同学。 1、LR: 逻辑回归,用于分类问题,模型可以理解为 线性模型sigmoid函数:y11e−(wxb)y \frac{1}{1e^{-(wxb)}} y1e−(wxb)1​ 其优化目标是…

【Linux系统编程】10.open/close函数

目录 open 参数pathname 参数flags 主类 副类 参数mode 返回值 close 参数fp 测试代码 测试结果 错误处理函数 open 查看open函数 man 2 open 其中 #include <unistd.h> 包含 #include <sys/types.h> #include <sys/stat.h> 参数pathname 打开…

NodeRED学习(五)http websoket

HTTP定义响应内容&#xff1a; 注&#xff1a;可含请求参数 // msg.payload{ // "demo":"你好" // } msg.payload msg.req.query.content; return msg;支持浏览器请求测试&#xff1a;IP:1880/(URL) 组件验证请求&#xff1a; websocket消息: 工具参考…

Python学习笔记--循环语句 for 和 while

目前更新中.... &#xff08;一&#xff09; while循环的基本语法 1. 基本格式 while 条件&#xff1a; 条件满足时&#xff0c;做的事情1 条件满足时&#xff0c;做的事情2 …&#xff08;省略&#xff09;… 只要条件满足&#xff0c;会无限循环执行条件需要布尔类型结果…

excel表格的导入和导出(Java+element)

本项目是前端vue3&#xff0c;后端springboot开发 需求为&#xff1a;前端导入表格&#xff0c;后端处理表格存储数据&#xff0c;点击按钮可以导出表格。 上传效果&#xff1a;前端点击上传按钮&#xff0c;会跳出选择文件框&#xff0c;选择文件&#xff0c;点击上传。 导出效…

C语言CRC-16 IBM格式校验函数

C语言CRC-16 IBM格式校验函数 CRC-16校验产生2个字节长度的数据校验码&#xff0c;通过计算得到的校验码和获得的校验码比较&#xff0c;用于验证获得的数据的正确性。基本的CRC-16校验算法实现&#xff0c;参考&#xff1a; C语言标准CRC-16校验函数。 不同厂家通过对输入数…

鸿鹄工程项目管理系统源码 Spring Cloud+Spring Boot+Mybatis+Vue+ElementUI+前后端分离构建工程项目管理系统

鸿鹄工程项目管理系统 Spring CloudSpring BootMybatisVueElementUI前后端分离构建工程项目管理系统 1. 项目背景 一、随着公司的快速发展&#xff0c;企业人员和经营规模不断壮大。为了提高工程管理效率、减轻劳动强度、提高信息处理速度和准确性&#xff0c;公司对内部工程管…

这家年销售额309亿的Tier 1,要谈一场千亿新生意

跨入2023年&#xff0c;智能汽车软件赛道更热闹了。 相较于传统汽车开发模式&#xff0c;软件属于分布式ECU工程开发的一部分&#xff0c;由一级供应商作为黑盒提供&#xff0c;软件开发成本等被认为是硬件系统成本的一部分&#xff0c;没有实现单独定价。 如今&#xff0c;“…

Redis 如何使用 RedisCluster 构建高可用集群架构?

文章目录Redis 如何使用 RedisCluster 构建高可用集群架构&#xff1f;什么是 Redis Cluster&#xff1f;哈希槽&#xff08;hash slot&#xff09;一致性保证&#xff08;consistency guarantees&#xff09;如何构建 Redis Cluster&#xff1f;配置环境构建 A&#xff0c;A1 …

int(1) 和 int(10)区别

有个表的要加个user_id字段&#xff0c;user_id字段可能很大&#xff0c; alter table xxx ADD user_id int(1)。 int(1)怕是不够用吧&#xff0c;接下来是一通解释。 我们知道在mysql中 int占4个字节&#xff0c;那么对于无符号的int&#xff0c;最大值是2^32-1 4294967295&a…