day09_面向对象_多态_static

news2024/9/23 19:26:41

今日内容

1.作业
2.访问修饰符
3.static
4.多态

零、复习

私有化的单词: private

继承的关键词: extends

属性的封装

  • 将属性私有,private
  • 提供一对儿set,get

继承的特性:(自己的话说明)

  • 继承目的是减少重复代码,父类代码子类自己使用
  • A extends B
  • 关于属性: 子类可以使用父类非私有的属性
  • 关于方法: 子类可以使用父类非私有的方法,
  • 如果父类方法不适用,就要重写方法
  • 关于构造: 子类构造方法内有super()可以调用父类构造方法

this能干什么

  • this调用属性,调用方法,调用构造方法

super能干什么

  • 调用父类属性,调用父类方法,调用父类构造方法

重写的语法

  • 子类和父类的访问修饰符,返回值类型,方法名,参数列表完全一样

一、作业

作业1: 详见项目day09/src/com/qf/homework/pdf6_t19

主要考察:属性封装,类继承,和方法重写

image-20231019092058884

这是UML类体. 实线箭头代表继承关系

作业2: 详见项目day09/src/com/qf/homework/pdf6_t24

主要考察:属性封装,类继承,和方法重写以及super的使用,还有基本的代码逻辑(如何算工资)

二、访问修饰符

访问修饰符又叫 访问权限符,访问控制

就是用来限制属性和方法的使用范围的,即类中的属性和方法在什么地方可以使用 什么地方不可以使用

所以就有了两个研究方向

  • 有哪些修饰符?
  • 都有哪些地方?
当前类中同一包下其他类其他包子类内其他包非子类
public(公开公共)自己能用,子对象能用
protected(受保护)自己不能用,子类对象能用×
缺省(默认)(不写)××
private(私有)×××

总结: 访问修饰符有访问大小范围:

public > protected > package > private

延伸: 子类重写父类方法,子类的访问修饰符 >= 父类访问修饰符

三、static

3.1 介绍

static 修饰符, 意思是静态的, 静态的一旦设置值就可以被所有对象使用

  • 修饰属性
  • 修饰方法
  • 修饰内部类(了解)

作用:

  • 被static修饰的属性或者方法在内存只有一个
  • 被static修饰的属性或者方法,就会被所有对象共享
  • 会随着类(class字节码文件)加载而初始化

回忆以前(没有static时)

  • 一个类创建的多个对象和对象的关系? 相互独立互不影响
  • 对象和属性和方法的关系, 每次创建一个对象,对象都有属于自己的属性和方法

static特性

  • 凡是被static修饰的属性和方法,会随着class文件加载到内存而初始化
    • 其他的普通成员变量是随着创建对象,在堆中出现初始化
    • 静态的属性和方法会先出现,即没有创建对象时可以被使用了
    • 有静态修饰的属性和方法时 不一定有对象
  • 凡是被static修饰的属性和方法,在内存只有一份,被该类的所有对象共享

总结

  • 不加静态的属性和方法通过对象调用
  • 加了静态的属性和方法都通过类名调用
  • 静态方法可以直接调用静态的方法和属性
  • 静态方法不能直接调用非静态方法
  • 非静态方法能调用静态属性和方法
  • 静态方法内不能使用this

3.2 演示

黄牛卖演唱会票,假设100张票,多个黄牛在卖

public class Huangniu {
    /**
     * 属性不加static,那就是成员变量,又叫对象属性
     * 叫对象属性是因为,每次创建对象,每个对象都有该属性
     * 成员变量/对象属性是在内存堆中
     * -----------------------------------------
     * 但是加上static,不再是对象属性,即不属于每个对象,也不存在于堆中
     * 而是在
     */
    static int ticket = 100;
    String name;
    // 卖票
    public void sellTicket(){
        System.out.println("黄牛卖票" );
        ticket--;
    }
}
public class TestHuangniu {
    public static void main(String[] args) {
        // 找到黄牛
        Huangniu niu1 = new Huangniu( );
        // 先看有多少张票
        // System.out.println(niu1.ticket );
        // 静态的属性建议使用类名调用
        System.out.println(Huangniu.ticket );

        // 卖一张
        niu1.sellTicket();
        // 再看一眼余票
        System.out.println( niu1.ticket);
        System.out.println("----------------" );

        // 再找到黄牛,卖票
        Huangniu niu2 = new Huangniu( );
        // 查看余票
        System.out.println(niu2.ticket );

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

        // toString就是静态方法,类名直接调用
        Arrays.toString(new int[]{1});
        // PI就是静态属性,类名直接调用
        System.out.println(Math.PI );
    }
}

image-20231019151119752

3.3 应用场景

  1. 将一些方法或者属性定义成静态,方便调用,因为类名直接调用
    例如: Arrays.toString, Math.PI
  2. 当有些时候确实需要某个数据被共享时,就加上静态
    例如: 火车票

四、多态

4.1 介绍

多态: 同一种东西多种形态

面向对象中的多态: 特指某个方法,运行得到不同的结果 (同一个对象调用同一个方法结果却不一样)


如何做?要同时满足三个条件

  • 继承
  • 重写
  • 父类引用指向子类对象(向上转型)(把子类包装成父类)

为什么要多态?有什么好处?

  • 提高代码扩展性
  • 兼容性
  • 降低耦合性

4.2 演示

image-20231019154649525

4.3 关于多态的应用场景

  1. 方法的参数列表是父类,传参数传入子类对象,让该方法展现多态
public class TestPoly {

    public static void main(String[] args) {
        // 父类引用指向父类对象(自己引用指向自己对象)
        // Animal animal = new Animal( );

        // 子类引用指向子类对象(自己引用指向自己对象)
        // Dog dog = new Dog( );

        // 父类引用 指向 子类对象(向上转型)(将子类包装成父类)
        // Animal animal = new Dog( );
        // System.out.println(animal );
        Animal animal = new Cat();

        // eat方法就会出现多态
        animal.eat();
        System.out.println("-------------------" );
        dogShow(new Dog());
        catShow(new Cat());
        System.out.println("-------------------" );

        // 使用多态调用方法
        animalShow(new Dog());// 向上转型
        animalShow(new Cat());
        animalShow(new Pig());

    }

    /**
     * 设计方法,展示每个动物吃的东西
     */
    public static void dogShow(Dog dog){
        dog.eat();
    }
    public static void catShow(Cat cat){
        cat.eat();
    }
    // 如果再加动物,这里就需要再重新定义好多方法
    // 有了多态就可以解决这些问题
    // 将方法参数列表设计父类,传参数时传入子类对象(向上转型)
    // 这样就可以提高代码扩展性,大大减少了耦合性
    public static void animalShow(Animal animal){
        animal.eat();
    }
}
  1. 方法的返回值是父类,允许返回子类对象
class Animal {
}

class Dog extends Animal {
}

class Cat extends Animal {
}

public class TestAnimal {
    public static Animal getAnimal() {
        //1
        // return null; // ok
        // return new Animal(); // ok
         return new Cat(); // ok
        //return new Dog(); // ok
    }

    public static void main(String args[]) {
        Animal animal = getAnimal( );
        System.out.println(animal );
    }
}

image-20231019165032938

  1. 利用多态性,设计父类类型的数组,存储子类对象
public class TestShape {

    public static void main(String[] args) {

        // 创建父类类型数组
        // 数据类型[] 数组名 = new 数据类型[长度];
        Shape[] shapes = new Shape[3];

        // 存储的是子类对象
        Circle circle = new Circle( );
        circle.setR(10);
        shapes[0] = circle;// 相当于向上转型

        // 子类对象circle赋值给父类类型shape的引用
        Rect rect = new Rect( );
        rect.setLength(10);
        rect.setWidth(5);
        shapes[1] = rect;

        Square square = new Square( );
        square.setL(10);
        shapes[2] = square;

        for (int i = 0; i < shapes.length; i++) {
            Shape shape = shapes[i];// 取值
            // 运行看子类
            double area = shape.area( );// 该方法会展现多态性
            double girth = shape.girth( );// 该方法会展现多态性
            System.out.println("面积:" + area );
            System.out.println("周长:" + girth );
            System.out.println("----------" );
        }
    }
}

image-20231019173419365

4.4 注意事项

多态方法运行的注意事项

  • 父类引用调用的方法如果子父类都有,那么就是展示子类的(运行看子类)
  • 父类引用调用的方法父类有,子类没有 ----> 允许(编译看父类)
  • 编译看父类,运行看子类
    • 父类引用调用的方法,父类得有该方法,父类没有的话编译就报错
    • 父类引用调用的方法,子类中有,那么就运行子类的
      • 子类中没有该方法,就运行父类的

五、总结

关于访问修饰符 ,见到认识,知道什么效果即可
static,见到认识,知道类名可以直接调用静态方法和属性
重点还是多态,重点在于使用多态(参数,返回值,数组),重点在于题
写题口诀
	多态前提: 继承,重写,向上转型
	编译看父类,运行看子类

六、作业

t22
t25

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

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

相关文章

软考(高级)是否需要报班,大家有什么建议?

对于报考高级专业领域还不确定。根据我的个人经验&#xff0c;我强烈建议不要犹豫&#xff0c;直接报班。时间非常紧张&#xff0c;务必抓紧学习重点&#xff0c;不要漫无目的地自学。免费的学习方式往往会付出更多的时间成本。请考虑自身经济情况。 尽管自学考试自由度高&…

vue之使用箭头函数导致表格无法刷新数据

vue之使用箭头函数导致表格无法刷新数据 1.产生背景2. 产生原因3. 解决措施 1.产生背景 在使用初始化方法查询默认表单后&#xff0c;有使用选择器进行条件查询的需求。 但在使用监听器监听选择器绑定的value值时使用了箭头函数&#xff0c;请求响应后发现数据更新了但表格为…

C语言指针用法大全

1. 指针的基础概念&#xff1a; 什么是指针&#xff1f; 如何声明和初始化指针&#xff1f; 指针和变量的关系。 2. 内存和地址&#xff1a; 计算机内存的基本概念。 如何获取变量的地址&#xff1f; 如何通过指针访问变量的地址&#xff1f; 3. 指针运算符&#xff1a; * 运算…

蓝蜂物联网水肥一体化MQTT应用案例

水肥一体化MQTT应用案例 一、客户介绍 目前我国农业用水面临资源短缺的问题&#xff0c;同时农业用水浪费现象非常严重&#xff0c;造成我们不可能通过单纯增加新水源来缓解农业用水的紧缺状况。 通过水肥一体化物联网远程精准控制技术&#xff0c;可以根据检测土壤水分、作物…

Stable Diffusion之novel Ai教程,小白必经之路

一、介绍是Stable Diffusion(简称SD) 1.SD是什么 Stable diffusion是一个基于Latent Diffusion Models&#xff08;潜在扩散模型&#xff0c;LDMs&#xff09;的文图生成&#xff08;text-to-image&#xff09;模型。简单的来说SD是可以通过提示词生成图片的应用。目前已经发…

LeetCode算法栈—验证图书取出顺序

验证图书取出顺序 目录 验证图书取出顺序 题解&#xff1a; 代码&#xff1a; 运行结果&#xff1a; 验证图书取出顺序 现在图书馆有一堆图书需要放入书架&#xff0c;并且图书馆的书架是一种特殊的数据结构&#xff0c;只能按照 一定 的顺序 放入 和 拿取 书籍。 给定一个…

MIKE水动力笔记17_MIKE文件转shp、统计每个单元格的面积

本文目录 前言Step 1 MIKE文件转shpStep 2 在ArcGIS中打开shp统计相应指标 前言 MIKE的工具箱中自带一个转shp的工具&#xff0c;然后可以拖进ArcGIS中很方便的统计每个单元格的面积和每个网格点的水深。 Step 1 MIKE文件转shp MIKE允许转shp的文件类型包括dfs2文件、dfsu文…

EDU实战-SQL注入漏洞

对于edu来说&#xff0c;是新人挖洞较好的平台&#xff0c;本次记录一次走运的捡漏0x01 前景 在进行fofa盲打站点的时候&#xff0c;来到了一个后台管理处看到集市二字&#xff0c;应该是edu站点 确认目标身份&#xff08;使用的quake进行然后去ipc备案查询&#xff09; 网…

Redis 之 SessionCallback RedisCallback 使用

&#x1f4e2;&#x1f4e2;&#x1f4e2;&#x1f4e3;&#x1f4e3;&#x1f4e3; 哈喽&#xff01;大家好&#xff0c;我是「奇点」&#xff0c;江湖人称 singularity。刚工作几年&#xff0c;想和大家一同进步&#x1f91d;&#x1f91d; 一位上进心十足的【Java ToB端大厂…

前端 vue 实现区域地图-并在地图上标注柱状图

效果图 西藏的区域规划以及柱状图 一、下载区域地图的js文件 区域地图可以在中国的区域地图 这里下载 二、实现代码 一个普通的html可以参考 实现广东省的区域地图并标注柱状图 三、vue里具体实现代码 1.做一个有具体宽高的dom <template><div class"box&…

小程序之自定义组件 结合案例(会议OA的会议/投票管理及个人中心的搭建)详解 (4)

⭐⭐ 小程序专栏&#xff1a;小程序开发专栏 ⭐⭐ 个人主页&#xff1a;个人主页 目录 一.前言 二.小程序自定义组件及其使用 2.1 自定义组件的使用 三.使用自定义组件完成会议功能界面的实现 3.1 导航栏的实现 3.2 会议界面内容的实现 四.投票管理界面 五.个人中心 今天…

SystemVerilog Assertions应用指南 Chapter1.30 使用“ intersect”控制序列的长度

在123节讨论的“ intersec”运算符可以有效地控制序列的长度,尤其是在时序窗口未定义上界的情况。每当使用可能性( eventuality)运算符时,检验器成功所需的时钟周期数没有限制。运算符 intersect提供了一个定义可能性运算符可以使用的最小和最大时钟周期数的机制。 属性…

计算机丢失MSVCP140.dll的解决方法分享

MSVCP140.dll是一个动态链接库文件&#xff0c;它是Microsoft Visual C 2015 Redistributable的一部分。这个文件包含了许多用于运行C程序的函数和类库。当计算机丢失这个文件时&#xff0c;可能会导致某些软件或游戏无法正常运行。 那么&#xff0c;为什么计算机会丢失MSVCP14…

Flex and Bison 阅读与学习笔记

本文的内容来源于本人阅读 flex & bison的笔记和项目工程学习中遇到的问题。如果你能从中获得一丝丝帮助&#xff0c;本人将不胜荣幸。 文章目录 Ⅰ、目录与批注前四章 引言和使用介绍flex 规范参考bison 参考规范其余内容 Ⅱ、相关练习代码学习历程代码实例 参考文献 Ⅰ、…

【文章摘要-20231019】Any-to-Any Generation via Composable Diffusion

论文链接 代码链接 作者提出了一个可组合的扩散模型&#xff0c;该模型体现为能够处理任何输入模态的组合&#xff0c;进而输出任何模态组合的新型生成模型&#xff0c;如语言、图像、视频或音频。不同于已经存在的生成式人工智能系统&#xff0c;该算法能够并行生成多个模态并…

Java基础 :内部类、枚举、泛型

内部类 概念 是类中的五大成分之一&#xff08;成员变量、方法、构造器、内部类、代码块&#xff09;&#xff0c;如果一个类定义在另一个类的内部&#xff0c;这个类就是内部类。 场景 当一个类的内部&#xff0c;包含了一个完整的事物&#xff0c;且这个事物没有必要单独…

工作之余Happy一下(实现时钟特效)

样式 测试代码&#xff1a; <!DOCTYPE html> <html> <head lang"en"><meta charset"UTF-8"><title>时钟特效</title><style> body{background: #000;}.content{width: 400px;margin: auto;color: #fff;}#title…

openGauss学习笔记-104 openGauss 数据库管理-管理数据库安全-客户端接入之SSL证书管理-证书替换

文章目录 openGauss学习笔记-104 openGauss 数据库管理-管理数据库安全-客户端接入之SSL证书管理-证书替换104.1 操作场景104.2 前提条件104.3 注意事项104.4 操作步骤 openGauss学习笔记-104 openGauss 数据库管理-管理数据库安全-客户端接入之SSL证书管理-证书替换 openGaus…

工业企业网络推广解决方案 | 网络营销专家分享 | 上海添力

在国内&#xff0c;工业企业如果想在线上做推广&#xff0c;其主要途径就是做搜索引擎推广&#xff0c;在几个常用的搜索引擎&#xff08;百度、360、搜狗、必应&#xff09;中&#xff0c;一般都是从百度开始做起。但不少工厂做百度广告&#xff0c;钱花了不少&#xff0c;就是…

做PPT或制作表情包时,不会把视频转成gif动图?5分钟学会

一、背景 当我们在做PPT时&#xff0c;不可避免的需要放一些视频&#xff0c;但视频占用空间太大&#xff0c;而且比较烦的是需要点一下才能播放。因此需要将视频转成gif动态&#xff0c;以自动播放。 GIF的全称是Graphics Interchange Format&#xff0c;可译为图形交换格式…