面向对象中的多态性

一、权限修饰符

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,一经查实,立即删除!

相关文章

【算法心得】二维dp的状态转移狂练

LCS&#xff1a; LCS变式&#xff1a;使两个字符串变成一样的&#xff0c;删除的和最小 https://leetcode.cn/problems/minimum-ascii-delete-sum-for-two-strings/ 建表 m ∗ n m*n m∗n or ( m 1 ) ∗ ( n 1 ) (m1)*(n1) (m1)∗(n1)&#xff1f; 感觉 ( m 1 ) ∗ ( n …

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…

Dart语言学习笔记(一)

1、命名规则 /*** 1&#xff09;.变量名称必须包含数字&#xff0c;字母&#xff0c;下划线&#xff08;_&#xff09;&#xff0c;和美元符号&#xff08;$&#xff09;组成 2&#xff09;.标识符的开头不能是数字开头3&#xff09;.标识符不能使用关键字和保留字4&#xff…

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;可以打印…

华为OD机考真题--数大雁--带答案

2023华为OD统一考试&#xff08;AB卷&#xff09;题库清单-带答案&#xff08;持续更新&#xff09;or2023年华为OD真题机考题库大全-带答案&#xff08;持续更新&#xff09; 题目描述: 一群大雁往南飞&#xff0c;给定一个字符串记录地面上的游客听到的大雁叫声&#xff0c;请…

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

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

使用maven容器打包java项目

docker run --rm -v /path/to/your/microservice:/app -w /app maven:latest mvn clean package 解释一下上面的命令&#xff1a; docker run&#xff1a;运行Docker容器。--rm&#xff1a;在容器运行结束后自动删除容器&#xff0c;避免堆积未使用的容器。-v /path/to/you…

使用springboot aop记录接口请求的参数及响应

概述 使用aop做日志记录&#xff0c;记录输入的参数名及参数值&#xff0c;并且记录接口响应结果。 切面类 package com.zou.metabox.common.aspect;import lombok.extern.slf4j.Slf4j; import org.aspectj.lang.JoinPoint; import org.aspectj.lang.annotation.*; import o…

【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、…

解析RocketMQ:高性能分布式消息队列的原理与应用

解析RocketMQ&#xff1a;高性能分布式消息队列的原理与应用 引言 什么是消息队列 消息队列是一种消息传递机制&#xff0c;用于在应用程序和系统之间传递消息&#xff0c;实现解耦和异步通信。它通过将消息发送到一个中间代理&#xff08;消息队列&#xff09;&#xff0c;…

算法通关村第二关——链表加法的问题解析

题目类型 链表反转、栈 题目描述 * 题目&#xff1a; * 给你两个非空链表来表示两个非负整数&#xff0c;数字最高位位于链表的开始位置。 * 它们的每个节点都只存储一个数字。将这两个数相加会返回一个新的链表。 * 你可以假设除了数字0外&#xff0c;这两个数字都不会以0开头…

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…

playwright自动化项目搭建

具备功能 关键技术&#xff1a; pylaywright测试库pytest单元测试框架pytest-playwright插件 非关键技术&#xff1a; pytest-html插件pytest-rerunfailures插件seldom 测试框架 实现功能&#xff1a; 元素定位与操作分离失败自动截图并保存到HTML报告失败重跑可配置不同…

常见的排序算法

常见的排序算法 常见的排序算法包括&#xff1a; 冒泡排序&#xff08;Bubble Sort&#xff09;&#xff1a;依次比较相邻的元素&#xff0c;将较大的元素交换到右侧&#xff0c;逐步将最大元素移动到末尾。插入排序&#xff08;Insertion Sort&#xff09;&#xff1a;将数组…

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

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