3月31号总结

news2024/11/27 13:09:57

java学习

一.面向对象之多态

什么是多态:

多态是在继承/实现情况下的一种现象。表现为对象多态行为多态

对象多态:一个对象可以有多种身份,比如一个人,可以是一个父亲,一个老师,或者等等。

行为多态:都是同一个身份但是表现的能力不同,比如一个人,有的跑得快,有的跑得慢。

实现多态的必要条件:

  1. 必须在继承体系下
  2. 子类必须要对父类中方法进行重写
  3. 通过父类的引用调用重写的方法

向上转型+多态举例

向上转型就是创建一个子类对象,将其赋值给一个父类类型的引用变量。

这是由于Java的继承机制,子类对象具有父类对象的所有特征,所以可以通过将子类对象赋值给父类类型的引用变量来实现向上转型(从小范围转向大范围)。这种转型的好处是可以实现代码的复用和多态性。

语法格式:父类类型 对象名 =  new  子类类型()

为了介绍向上转型,我们要先写几个生动形象的类来做基础以帮助理解:

父类的定义

public class people {

    public void print()
    {
        System.out.println("我是人");
    }
}

子类继承加重写

public class doctor extends people{
    @Override
    public void print()
    {
        System.out.println("我是医生,跑得不快也不慢");
    }
}


public class teacher extends people{
    @Override
    public void print()
    {
        System.out.println("我是老师,跑得慢");
    }
}


public class student extends people{
    @Override
    public void print()
    {
        System.out.println("我是学生,跑得快");
    }

}

调用

 public static void main(String[] args) {
      people p1=new student();
      p1.print();
      people p2=new doctor();
      p2.print();
      people p3=new teacher();
      p3.print();
    }

在上面我们看到,一个people对象可以有学生对象、老师对象和医生对象,因为这三者都是人,这种叫做对象多态。

在我们调用它们的方法时可以看到,它们的跑步速度有着快慢的不同,这个叫做行为多态。

我们先看一下运行结果

通过上面例子我们知道,一个对象又包含几种不同的对象,在同一对象中,它们的行为又不同。

可以很好的了解到多态的意义。

那么我们为什么要用多态这种方式写代码呢?

多态的好处

  • 代码的灵活性:通过多态,可以将方法的调用与具体对象的类型解耦,使得程序更加灵活。
  • 可扩展性:通过添加新的子类,可以方便地扩展程序的功能,而无需修改现有的代码。
  • 代码的简洁性:多态使得代码更加简洁,减少了重复的代码量。

二.static关键字

static可以用来修饰类的成员方法、类的成员变量、类中的内部类,另外可以编写static代码块来优化程序性能。

使用

1. 静态变量(类变量):

  • 静态变量属于类而不是类的实例,因此无论创建了多少个类的实例,静态变量在内存中只有一份副本。
  • 静态变量可以通过类名直接访问,无需创建类的实例。
  • 通常用于表示类的共享状态或常量值。
class Counter {
    static int count = 0; // 静态变量,表示计数器

    void increment() {
        count++;
    }
}

2. 静态方法:

  • 静态方法属于类而不是类的实例,可以通过类名直接调用,无需创建类的实例。
  • 静态方法内部不能直接访问类的非静态成员,只能访问静态成员。
class MathUtils {
    static int add(int a, int b) {
        return a + b;
    }
}

3. 静态代码块:

  • 静态代码块是用static关键字声明的代码块,它在类加载时执行,并且只执行一次。
  • 静态代码块通常用于执行类的初始化操作,例如初始化静态变量。
class MyClass {
    static {
        System.out.println("hello");
    }
}

4. 静态内部类:

  • 静态内部类是定义在另一个类内部且被声明为static的类。
  • 静态内部类不持有对外部类实例的引用,因此它可以直接访问外部类的静态成员。
class Outer {
    static class Inner {
        void display() {
            System.out.println("班级");
        }
    }
}

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

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

相关文章

“‘悦’向新生,与‘榕’同行” 悦榕集团海外酒店中国区巡演圆满收官

三十周年盛会如约而至,来自25家海外酒店及地产代表亮相上海、深圳、成都3城 【中国上海,2024年3月29日】值此悦榕集团成立30周年之际,悦榕集团海外酒店中国区路演活动于上海、成都、深圳三地举行,旗下25家海外酒店和集团海外地产代…

Ch2 Posix IPC

2.1 概述 三种IPC均使用路径名进行标识。路径名既可以是系统中的实际路径名,也可不是,两者的不一致性可能带来移植性问题。 2.2 IPC名字 2.3 创建与打开IPC通道 2.4 IPC权限

milvus knowhere源码编译测试

简介 Knowhere 是 Milvus 的核心向量执行引擎,集成了Faiss、Hnswlib和Annoy等多个向量相似度搜索库。 编译环境 操作系统: Ubuntu 22.04.4 gcc/g:11.4.0 cmake: 3.27.7 安装依赖 apt install build-essential libopenblas-dev libaio-dev python3-dev python…

备考ICA----Istio实验12---配置双向TLS Istio Ingress Gateway实验

备考ICA----Istio实验12—配置双向TLS Istio Ingress Gateway实验 本实验部分配置延续上个Istio实验11 1. 重新配置secret 重新配置secret使其带有ca证书可以验证客户端证书是否合法 先删除原有secret,再配置新的secret # 删除原tls类型的secret kubectl -n istio-system d…

第四十六周:文献阅读+itransfomer

目录 摘要 Abstract 文献阅读:ITtransformer——转置transformer对时间序列预测的实用性 现有问题 提出方法 方法论 研究实验 实验目的 数据集 基线模型 实验结果 研究贡献 模型代码 总结 摘要 本周阅读的文献《Inverted Transformers are Effective…

海康威视【管理员】账号密码泄露【附Poc】

「企业介绍」 海康威视成立于2001年, 是一家专注技术创新的科技公司 ,在安防、智能物联领域耕耘二十余年,业务覆盖全球150多个国家和地区。公司致力于将物联感知、人工智能、大数据技术服务于千行百业,引领智能物联新未来&#x…

【Python】——变量名的命名规则

🎃个人专栏: 🐬 算法设计与分析:算法设计与分析_IT闫的博客-CSDN博客 🐳Java基础:Java基础_IT闫的博客-CSDN博客 🐋c语言:c语言_IT闫的博客-CSDN博客 🐟MySQL&#xff1a…

2024长三角快递物流高质量创新发展论坛

2024长三角快递物流高质量创新发展论坛暨 2024长三角快递物流供应链与技术装备展览会(杭州) 2024年7月8-10日 | 杭州国际博览中心 指导单位:浙江省邮政管理局 中国快递协会 主办单位:浙江省快递行业协会 联合主办:上…

【医学嵌入模型】中文医疗文本处理大模型 PCL-MedBERT

中文医疗文本处理大模型 PCL-MedBERT 提出背景对ELECTRA限制的深入分析eHealth的创新方法实体识别关系抽取 总结 最近再做医学项目,需要从文本中抽取医学概念和关系,通用模型的抽取效果还可以。 但还想找医学嵌入模型,能够更准确地从文本中识…

python---基础(一)

文章目录 前言1.对象的基本组成2.变量和常量2.1.变量的声明2.2.常量_链式赋值_系列解包赋值2.2.1.常量是不是真的常量?2.2.2.链式赋值2.2.3.系列解包赋值 3.内置数据类型_基本算数运算符3.1四种内置数据类型3.2.基本运算符3.3.divmod() 前言 这几年,随着…

Wasm初上手

总之也是为了扩宽技术面吧。。。我也不知道为什么就想试试了,就酱。 参考阅读:极客时间《WebAssembly入门课》 安装wasm的编译器Emscripten。Emscripten 是一个“源到源”语言编译器工具集,这个工具集可以将 C/C 代码编译成对应 JavaScript 代…

JavaScript 入门指南(三)BOM 对象和 DOM 对象

BOM 对象 BOM 简介 BOM(browser Object Model)即浏览器对象模型BOM 由一系列对象组成,是访问、控制、修改浏览器的属性的方法BOM 没有统一的标准(每种客户端都可以自定标准)。BOM 的顶层是 window 对象 window 对象 …

微机原理-基于8086电压报警器仿真系统设计

**单片机设计介绍,微机原理-基于8086电压报警器仿真系统设计 文章目录 一 概要二、功能设计设计思路 三、 软件设计原理图 五、 程序六、 文章目录 一 概要 基于8086电压报警器仿真系统设计是一个综合了硬件和软件设计的复杂过程。以下是该设计概要的主要内容&…

TypeScript-自动编译

1.生成文件 tsc --init 2.修改配置文件 说明:通过CTRLF搜索到以下单词,进行修改。 "strict": true, //是否开启严格模式 "outDir": "./outFile", //表示ts文件最终编译为js文件,js文件存放的位置 3.新…

QML通过鼠标拖动的位置

当通过鼠标拖动Rectangle 的位置时,可以使用Qt Quick的MouseArea组件来实现 Rectangle {id: rectx:0;y:0width: 200; height: 100color: "lightblue"MouseArea {id: mouseAreaanchors.fill: parentdrag.target: rect//要拖动的项目的IDdrag.axis: Drag.XA…

C# 实践【WebService编写调用】

Webservice 学习 创建发布调用 创建 新增专案 点击确定,选择空白 右击新建好的专案下图中操作 新增项目选择 WEB 服务(ASMX) 新增项目完成,添加Web方法 启动之后的效果如下 调用方法测试接口 测试结果如下&#xff…

Docker镜像其他相关操作

镜像其他相关操作 1. 镜像备份 使用 docker save 将指定镜像保存成 tar 归档文件。 docker save [OPTIONS] IMAGE [IMAGE...] docker save -o /root/mycentos7.tar mycentos:7-o:镜像打包后的归档文件输出的目录。 2. 镜像恢复 使用 docker load 导入 docker s…

【活动回顾】| ABeam德硕受邀参加SAC+AI 智能分析与预算管理体验营并发表演讲

近日,主题为“商业AI,智慧未来”的SACAI 智能分析与预算管理体验营顺利召开,本次活动由SAP主办,ABeam中国受邀出席并发表专题演讲【云端计划,预见未来——SAP分析云全面预算案例分享】。 现场照 随着AI再次成为科技界和…

基于YOLOV5+Pyqt5农作物叶片病害检测系统

1、引言 农作物病害的精准检测与识别是推动农业生产智能化与现代化发展的重要举措。随着计算机视觉技术的发展,深度学习方法已得到快速应用,利用卷积神经网络进行农作物病害检测与识别成为近年来研究的热点。基于传统农作物病害识别方法,分析…

高阶DS---AVL树详解(每步配图)

目录 前言: AVL树的概念: AVL树节点的定义: AVL树的插入(重点) AVL树的旋转: (1)新节点插入较高左子树的左侧---右单旋 (2)新节点插入较高右子树的右侧---左单旋 …