面向对象中的多态性

一、权限修饰符

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.mzph.cn/news/16064.shtml

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

相关文章

git从主仓库同步到fork仓库

git从主仓库同步到fork仓库 1. fork远程仓库到本地仓库2. 将远程仓库添加到本地3. 更新本地项目主库地址4. 将远程仓库更新到本地仓库5. 将本地仓库合到远程分支 1. fork远程仓库到本地仓库 方式一&#xff1a;通过git命令 git clone fork库地址方式二&#xff1a;通过git页面…

VBA技术资料MF36:VBA_在Excel中排序

【分享成果&#xff0c;随喜正能量】一个人的气质&#xff0c;并不在容颜和身材&#xff0c;而是所经历过的往事&#xff0c;是内在留下的印迹&#xff0c;令人深沉而安谧。所以&#xff0c;优雅是一种阅历的凝聚&#xff1b;淡然是一段人生的沉淀。时间会让一颗灵魂&#xff0…

jMeter使用随记

参数化BodyData 先制作参数文件 再设置一个csv data set config 最后在body data里面写上参数${xxxxx}

实用调试技巧(1)

什么是bug&#xff1f;调试是什么&#xff1f;有多重要&#xff1f;debug和release的介绍。windows环境调试介绍。一些调试的实例。如何写出好&#xff08;易于调试&#xff09;的代码。编程常见的错误。 什么是Bug 我们在写代码的时候遇到的一些问题而导致程序出问题的就是Bu…

vue使用Clodop插件打印

一、前往lodop官网&#xff0c;下载插件&#xff0c;http://www.lodop.net/index.html 这里下载的window64位的&#xff0c;将插件安装好&#xff0c;运行&#xff0c;会看到 点击‘去了解C-Lodop>>’,会跳转至使用说明页面&#xff0c;在这个页面里&#xff0c;可以打印…

在登录界面中设置登录框、多选项和按钮(HTML和CSS)

登录框&#xff08;Input框&#xff09;的样式&#xff1a; /* 设置输入框的宽度和高度 */ input[type"text"], input[type"password"] {width: 200px;height: 30px; }/* 设置输入框的边框样式、颜色和圆角 */ input[type"text"], input[type&q…

【RabbitMQ】之消息的可靠性方案

目录 一、数据丢失场景二、数据可靠性方案 1、生产者丢失消息解决方案2、MQ 队列丢失消息解决方案3、消费者丢失消息解决方案 一、数据丢失场景 MQ 消息数据完整的链路为&#xff1a;从 Producer 发送消息到 RabbitMQ 服务器中&#xff0c;再由 Broker 服务的 Exchange 根据…

深度学习实践——卷积神经网络实践:裂缝识别

深度学习实践——卷积神经网络实践&#xff1a;裂缝识别 系列实验 深度学习实践——卷积神经网络实践&#xff1a;裂缝识别 深度学习实践——循环神经网络实践 深度学习实践——模型部署优化实践 深度学习实践——模型推理优化练习 深度学习实践——卷积神经网络实践&#xff…

简单认识NoSQL的Redis配置与优化

文章目录 一、关系型数据库与非关系型数据库1、关系型数据库&#xff1a;2、非关系型数据库3、关系型数据库和非关系型数据库区别&#xff1a;4、非关系型数据库应用场景 二.Redis1、简介2、优点&#xff1a;3、Redis为什么这么快&#xff1f; 三、Redis 安装部署1、安装配置2、…

Centos部署Springboot项目详解

准备启动jar包&#xff0c;app.jar放入指定目录。 一、命令启动 1、启动命令 java -jar app.jar 2、后台运行 nohup java -jar app.jar >/dev/null 2>&1 & 加入配置参数命令 nohup java -Xms512M -Xmx512M -jar app.jar --server.port9080 spring.profiles…

同一数据集(相同路径)的 FID 为负数

公众号&#xff1a;EDPJ 先说结论&#xff1a;这是算法中对复数取实部的结果&#xff0c;对 FID 的影响不大。 FID是从原始图像的计算机视觉特征的统计方面&#xff0c;来衡量两组图像的相似度&#xff0c;是计算真实图像和生成图像的特征向量之间距离的一种度量。 这种视觉特…

7.事件类型

7.1鼠标事件 案例-轮播图点击切换 需求&#xff1a;当点击左右的按钮&#xff0c;可以切换轮播图 分析: ①右侧按钮点击&#xff0c;变量&#xff0c;如果大于等于8&#xff0c;则复原0 ②左侧按钮点击&#xff0c;变量–&#xff0c;如果小于0&#xff0c;则复原最后一张 ③鼠…

详解主流的Hybrid App 技术框架与研发方案

移动操作系统在经历了诸神混战之后&#xff0c;BlackBerry OS、Symbian OS、Windows Phone等早期的移动操作系统逐渐因失去竞争力而退出。目前&#xff0c;市场上主要只剩下安卓和iOS两大阵营&#xff0c;使得iOS和安卓工程师成为抢手资源。然而&#xff0c;由于两者系统的差异…

idea集成jrebel实现热部署

文章目录 idea集成jrebel实现热部署下载jrebel 插件包下载jrebel mybatisplus extensition 插件包基础配置信息情况一其次情况三情况四情况五情况六情况七 验证生效与否 Jrebel热部署不生效的解决办法 idea集成jrebel实现热部署 在平常开发项目中&#xff0c;我们通常是修改完…

ChatGPT结合知识图谱构建医疗问答应用 (二) - 构建问答流程

一、ChatGPT结合知识图谱 上篇文章对医疗数据集进行了整理&#xff0c;并写入了知识图谱中&#xff0c;本篇文章将结合 ChatGPT 构建基于知识图谱的问答应用。 下面是上篇文章的地址&#xff1a; ChatGPT结合知识图谱构建医疗问答应用 (一) - 构建知识图谱 这里实现问答的流程…

小研究 - JVM GC 对 IMS HSS 延迟分析(二)

用户归属服务器&#xff08;IMS HSS&#xff09;是下一代通信网&#xff08;NGN&#xff09;核心网络 IP 多媒体子系统&#xff08;IMS&#xff09;中的主要用户数据库。IMS HSS 中存储用户的配置文件&#xff0c;可执行用户的身份验证和授权&#xff0c;并提供对呼叫控制服务器…

Segment anything(图片分割大模型)

目录 1.Segment anything 2.补充图像分割和目标检测的区别 1.Segment anything 定义&#xff1a;图像分割通用大模型 延深&#xff1a;可以预计视觉检测大模型&#xff0c;也快了。 进一步理解&#xff1a;传统图像分割对于下图处理时&#xff0c;识别房子的是识别房子的模型…

三数之和——力扣15

文章目录 题目描述法一 双指针排序 题目描述 法一 双指针排序 class Solution{ public:vector<vector<int>> threeSum(vector<int>& nums){int nnums.size();vector<vector<int>> ans;sort(nums.begin(), nums.end());for(int first0;first&…

【PHP】简记问题:使用strtotime(‘-1 month‘, time)获取上个月第一天时间戳出错

发生场景 在7月31号是查看统计上个月订单购买总金额&#xff0c;查询结果为0 $preMonthStart strtotime(date(Ym01, strtotime("-1 month"))); $curMonthStart strtotime(date(Ym01)); # 统计上月份实际订单金额 $sql "SELECT count(money) FROM orders WH…

《吐血整理》进阶系列教程-拿捏Fiddler抓包教程(17)-Fiddler如何充当第三者再识AutoResponder标签-下

1.简介 上一篇宏哥主要讲解的一些在电脑端的操作和应用&#xff0c;今天宏哥讲解和分享一下&#xff0c;在移动端的操作和应用。其实移动端和PC端都是一样的操作&#xff0c;按照宏哥前边抓取移动端包设置好&#xff0c;就可以开始实战了。 2.界面功能解析 根据下图图标注位…