面向对象中的多态性

news2024/11/16 8:36:21

一、权限修饰符

public, 缺省, protected,private

二、this和super关键字

this:表示当前对象

super:表示父类声明的成员

原则:遵循就近原则和追根溯源原则。

三、Object类

java.lang.Object类是所有java类的超类,即所有的Java类直接或间接的继承于此类。

  1. int hashCode(): 返回对象的哈希值,默认返回的是对象的内存地址转换而来的一个整数,建议子类重写。函数作用:为了提高哈希表性能
  2. Class getClass(): 返回对象的运行时类型。
  3. String toString(): 把对象转换为一个字符串,默认此方法返回的是对象的运行时类型名称+@+对象哈希值的十六进制。建议子类都重写该方法,用于返回对象的属性信息。System.out.println()输出对象时,默认会调用对象的toString方法。
  4. void finalize():垃圾回收期回收对象时会调用对象的此方法,已过时。

四、对象数组

4.1 介绍和内存分析

数组的元素是对象,即引用数据类型。在内存层面,数组存放在jvm的栈中,数组元素存放的是存放在堆中的对象的地址值。

Person[] ps = new Person[3];
ps[0] = new Person("张三", 18);
ps[1] = new Person("李四", 19);
ps[2] = new Person("王五", 20);

for(Person p : ps){
	System.out.println(p);
}

对象数组内存分析

4.2 对象数组排序

public class ObjectArrayTest {
    public static void main(String[] args) {
        Student[] students = new Student[5];
        students[0] = new Student("xiaowang",80);
        students[1] = new Student("xiaoming",90);
        students[2] = new Student("xiaohua",100);
        students[3] = new Student("huahua",79.5);
        students[4] = new Student("yangyan",60);

        //冒泡排序
        for (int i = 0; i < students.length - 1; i++) {//第一层:冒泡多少轮
            for (int j = 0; j < students.length - 1 - i; j++) {//第二层:每轮比较多少次
                if(students[j].getGrade() < students[j+1].getGrade()){
                    Student temp = students[j];
                    students[j] = students[j+1];
                    students[j+1] = temp;
                }
            }
        }
        //遍历输出
        for (int i = 0; i < students.length; i++) {
            System.out.println(students[i]);
        }
    }
}

五、多态

字面理解:事物在不同的条件环境下,呈现不同的状态。在java中,表示一个类在不同的情况下有不同的特性。

常用使用情况:

  1. 父类 father = new 子类(); //编译时创建的是父类对象

  2. 子类.方法(); //运行时实际调用的是子类的方法

5.1 多态理解

例子:当父类有多个方法是对同一个类的多个子类进行相同操作时,可以将多个方法抽象到其父类。如果是增加对特定子类的方法,违反了设计中的开闭原则。

开闭原则:对修改关闭,对扩展开放

在代码语法层面,表现为方法中的形参列表类型声明为父类,可以传递其子类对象实例进去。编译时子类可以作为父类进行传递,运行时可以使用子类的特性和方法。

  1. 提供代码的扩展性
  2. 降低了类与类之间的耦合度

5.2 多态的应用

  1. 赋值时的多态应用
public class ObjectArrayTest {
    public static void main(String[] args) {
        Pet[] pets = new Pet[3];
		//多态在赋值上面的应用
		pets[0] = new Cat();//猫
		pets[1] = new Dog();//狗
		pets[2] = new Pet();//宠物

    }
}
  1. 方法返回值时的多态
public class ObjectArrayTest {
   public Pet getPet(){
   	   return new Cat();//返回宠物类或其子类都可以
   }
}
  1. 传递参数的多态
public void feed(Pet pet){
	pet.eat();
}

feed(new Dog());
feed(new Cat());
feed(new Pet());

5.3 向上转型/向下转型

① 子类类型自动转换为其父类类型
向上转型:父类 father = new 子类();

Animal a = new Cat(); //Cat -> Animal

② 父类类型转换为其子类类型,需要强制转换
向下转型:

Animal a = new Cat();//无法调用子类特有的方法
Cat c = (Cat) a;//向下转型,Animal -> Cat
c.eat();

类转换异常ClassCastException:原先创建的类型不能转换为其他类型,只能强制转换为其子类类型。转换类型前可以使用 instanceof来判断类型是否是需要转换的那个类型。

5.4 虚方法和实方法

虚方法:可以被重写的方法,没有static,final修饰。
实方法:有static,final修饰时,编译运行时都看左边。

查看具体调用哪个方法:
① 静态绑定:查看父类的方法
②动态分配:核实子类是否重写父类的该方法

六、静态static

①静态无法访问非静态的方法和属性。
②非静态可以访问静态的方法和属性
原因:静态的方法和变量先于非静态的方法和变量存入内存。

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

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

相关文章

微信小程序测试要点

一、什么是小程序&#xff1f; 可以将小程序理解为轻便的APP&#xff0c;不用安装就可以使用的应用。用户通过扫一扫或者搜索的方式&#xff0c;就可以打开应用。 小程序最主要的特点是内嵌于微信之中&#xff0c;而使用小程序的目的是为了能够方便用户不在受下载多个APP的烦…

更好搭建负载测试环境的六个技巧

如果你如我昨天谈到的客户一样&#xff0c;花费了24到48个小时用于每个负载测试环境的搭建&#xff0c;那你的测试及构建部署能力绝对是受限的。 搭建一个仿真测试环境对于做好负载测试非常重要&#xff0c;同时它也是一个非常具有挑战性的任务&#xff0c;需要考虑技术解决、…

2023 7-31

题目1 寻找不同二叉树两节点的公共祖先 递归解法 仔细看这个解法更加容易理解: l、r 非空时,说明 p、q 分居 root 的两侧,root 就是 LCAl、r 任一为空,说明 LCA 位于另一子树或其祖先中代码 /*** Definition for a binary tree node.* struct TreeNode {* int val;* …

展锐USB充电图标更新流程

介绍 power_supply 目录下online节点是用于判断是否插入battery、ac(外部电源) 和USB 的节点&#xff0c;目录在sys/class/power_supply/battery(ac、usb)/online&#xff0c;主要用于在StatusBar 上显示充电的闪电图标。 SystemUI层介绍 流程介绍 在SystemUI 中控制充电图…

【ChatGPT辅助学Rust | 基础系列 | 基础语法】变量,数据类型,运算符,控制流

文章目录 简介&#xff1a;一&#xff0c;变量1&#xff0c;变量的定义2&#xff0c;变量的可变性3&#xff0c;变量的隐藏 二、数据类型1&#xff0c;标量类型2&#xff0c;复合类型 三&#xff0c;运算符1&#xff0c;算术运算符2&#xff0c;比较运算符3&#xff0c;逻辑运算…

Redis系列二:Clion+MAC+Redis环境搭建

1. ClionMACRedis-3.0-annotated环境搭建 参考&#xff1a; https://github.com/huangz1990/redis-3.0-annotated https://gitee.com/dumpcao/redis-3.0-annotated-cmake-in-clion https://tool.4xseo.com/a/12910.html 1.1 下载并导入Clion git clone https://gitee.com/dum…

基于SSM+JSP+LayUI的校园任务帮管理系统

校园帮项目 校园即时服务平台 用户角色 管理员 功能 登录、公告管理&#xff08;发布公告、停用公告&#xff09;、任务管理&#xff08;下架任务、删除任务&#xff09;、用户管理&#xff08;用户充值、限制用户&#xff09;、修改密码 用户角色 用户 功能 注册、登录…

Allied Telesis 证实 AR4050S-5G 路由器已成功通过 Splashtop On-Prem 快速处理现场数据

日本东京 —— Allied Telesis Inc. 和 NTT Comware Corporation 很高兴地宣布&#xff0c;Allied Telesis AR4050S-5G 路由器经证实已与 Splashtop On-Prem 解决方案成功集成&#xff0c;可安全快速地处理现场数据。根据测试结果&#xff0c;使用该方案&#xff0c;可以在实地…

dolphinscheduler switch+传参无坑版

dolphinscheduler 的前后传参有较多的坑&#xff0c;即便是3.0.5版本仍然有一些bug 下面是目前能无坑在3.0.5版本上使用的操作 前置任务 在界面上设置变量和参数名称 跟官方网站不一样&#xff0c;注意最后一行一定使用echo ${setValue(key$query)}的方式&#xff0c;注意引…

一次web网页设计实践——checkbox单选、复选功能的实现

由于工作内容原因近期做了一个网页&#xff0c;记录下。 需求&#xff1a; 写一个如下的页面&#xff0c;包括checkbox单选&#xff0c;checkbox多选&#xff0c;slect&#xff0c;text等控件 内容&#xff1a; 一、checkbox &#xff08;Wlan 开关&#xff09; 要求&#x…

基于Java+SpringBoot制作一个学生公寓管理小程序

制作一个学生公寓管理小程序,旨在优化和简化学生公寓的日常管理工作。该系统涵盖了各种功能模块,以满足学生住宿的需求,同时提供方便、高效的管理方式,该系统包含用户管理、卫生评比、来访登记、宿舍报修等模块。 一、小程序1.1 项目创建1.2 首页轮播图快捷导航iconfont图标…

git撤销提交,新建、删除分支汇总

目录 git 撤销中间某次提交&#xff0c;保留其他提交的方法git 撤销已经push的代码git 新建分支git 删除分支 git 撤销中间某次提交&#xff0c;保留其他提交的方法 git revert commit_id 通过git log 获取commit_id。 如果commit_id是merge节点的话&#xff0c;-m是指定具…

一种嵌入式LCD显示多国语言方法

简介 介绍一种嵌入式LCD显示多国语言方法&#xff0c;由于很多产品嵌入式资源有限&#xff0c;显示的字符也不多&#xff0c;所以可以自己制作一些字库&#xff0c;而不用字库芯片。 下面展示一种从字库取出字符的方法。 代码示例 #include <stdio.h> #include <s…

安装win版本的neo4j(2023最新版本)

安装win版本的neo4j 写在最前面安装 win版本的neo4j1. 安装JDK2.下载配置环境变量&#xff08;也可选择直接点击快捷方式&#xff0c;就可以不用配环境了&#xff09;3. 启动neo4j 测试代码遇到的问题及解决&#xff08;每次环境都太离谱了&#xff0c;各种问题&#xff09;连接…

八大排序算法--选择排序(动图理解)

选择排序 算法思路 每一次从待排序的数据元素中选出最小&#xff08;或最大&#xff09;的一个元素&#xff0c;存放在序列的起始位置&#xff0c;直到全部待排序的数据元素排完 。 选择排序的步骤&#xff1a; 1>首先在未排序序列中找到最小&#xff08;大&#xff09;元素…

原创 | 数字身份智能体的基本原理及应用前景展望

作者&#xff1a;张家林 本文约5700字&#xff0c;建议阅读10分钟 本文主要探讨自然人数字身份智能体的基本原理、关键技术及其应用前景的挑战。 数字身份智能体&#xff08;DIAs: digital identity agents&#xff09;是通过将一个实体的行为模式、个体特征等信息经过数据化、…

第3章 DOM

文档&#xff1a;DOM中的“D” 如果没有document&#xff08;文档&#xff09;, DOM也就无从谈起。当创建了一个网页并把它加载到Web浏览器中时&#xff0c;DOM就在幕后悄然而生。它把你编写的网页文档转换为一个文档对象。 对象&#xff1a;DOM中的“O” js中的对象分为三种…

Python入门【__init__ 构造方法和 __new__ 方法、类对象、类属性、类方法、静态方法、内存分析实例对象和类对象创建过程(重要)】(十四)

&#x1f44f;作者简介&#xff1a;大家好&#xff0c;我是爱敲代码的小王&#xff0c;CSDN博客博主,Python小白 &#x1f4d5;系列专栏&#xff1a;python入门到实战、Python爬虫开发、Python办公自动化、Python数据分析、Python前后端开发 &#x1f4e7;如果文章知识点有错误…

MySQL运维 从全备sql文件中提取指定表的数据并恢复

目录 一、运行环境 二、需求说明 三、思路分析 五、具体方案 六、恢复表数据 一、运行环境 系统&#xff1a;CentOS7.3 数据库&#xff1a;MySQL 8.0.21 二、需求说明 线上有个表的数据被误操作了很多&#xff0c;无法通过bin-log进行具体的恢复。所以当前我们需要从全…

推荐几款好用的建筑项目管理软件

工程项目管理软件在现代项目管理中扮演着越来越重要的角色&#xff0c;此类软件可以帮助团队把控从“立项”到“验收”各个阶段的项目进度&#xff0c;从而达到降低项目成本&#xff0c;提高项目执行效率的目的。 作为一个在项目管理领域奋斗过6年的项目经理&#xff0c;下面给…