Java学习笔记23(面向对象三大特征)

1.5 多态

​ *多态(polymorphic)

​ *方法或对象具有多种形态,是面向对象的第三大特征,多态是建立在封装和继承基础之上的

1.多态的具体体现

1.方法的多态

(重写和重载体现了多态)

2.对象的多态

​ 1.一个对象的编译类型和运行类型可以不一致

Animal animal = new Dog();	//animal编译类型是Animal,运行类型是Dog
animal = new Cat();

​ 2.编译类型在定义对象时,就确定了,不能改变

​ 3.运行类型是可以变化的

​ 4.编译类型看定义时=号的左边,运行类型看 = 号的右边

class Cat extends Animal
{
    public void cry()
    {
		System.out.println("小猫喵喵叫")
    }
}

class Animal
{
	public void cry()
    {
		System.out.println("动物在叫")
    }
}

main()
{
	Animal animal = new Cat();
    animal.cry();	//小猫喵喵叫
    //若此时改为Dog类,则会执行Dog类下的方法
    animal = new Dog();
    animal.cry();
}

2.多态的细节

1.多态的前提:两个对象(类)存在继承关系

2.本质:父类的引用指向了子类的对象

3.语法:父类类型 引用名 = new 子类类型();

4.特点:编译类型看左边,运行类型看右边

5.如果子类中写有父类没有的方法,那么如果运用了多态,就调用不了子类特有的成员方法

3.多态的向上转型

​ *(子类转换成父类)

​ *父类也可以是爷爷类(基类)

4.多态的向下转型

​ 1.语法: 子类类型 引用名 = (子类类型) 父类引用

​ 2.只能强转父类的引用,不能强转父类的对象

​ 3.要求父类的引用必须指向的是当前目标类型的对象

​ 4.当向下转型后,可以调用子类类型中所有的成员

main()
{
    Animal animal = new Cat();	//原来的animal的运行类型是Cat对象,所以可以在下面强转为Cat类型
    Cat cat = (Cat) animal;//强转父类引用为为子类	这样就可以调用子类的特有成员方法
}

5.注意事项和细节

1.属性没有重写直说,属性的值看编译类型

class Base
{
	int money = 10;
}

class Sub extends Base
{
    int money = 20;
}

main()
{
	Base base = new Base();
    base.money;//10
    Sub sub = new Sub();
    sub.money;//20
}

2.instanceof 比较操作符,用于判断对象的运行类型是否为XX类型或XX类型的子类型

class AA{}//父类
class BB extends AA{}//子类


main()
{
	BB bb = new BB();
    System.out.println(bb instanceof BB);//bb是不是BB的类型,返回结果为boolean值
        System.out.println(bb instanceof AA);
    
    //aa 编译类型 AA,运行类型BB
    AA aa = new BB();
	System.out.println(aa instanceof AA);//true
	System.out.println(aa instanceof BB);//true    
}

6.动态绑定机制

1.当调用对象方法的时候,该方法会和该对象的内存地址/运行类型绑定

2.当调用对象属性时,没有动态绑定机制,哪里声明(函数里面的成员属性为函数所在类下的成员属性),哪里使用

class A
{
    public int i = 10;
    public int sum()
    {
        return getI() + 10;
    }
    public int sum1()
    {
        return i +10;
    }
    public int getI()
    {
        return i;
    }
}

class B extends A
{
    public int i =20;
    public int sum()
    {
        return i +20;
    }
    public int getI()
    {
		return i;
    }
    public int sum1()
    {
		return i +10;
    }
}

main()
{
    A a = new B();//向上转型
    System.out.println(a.sum());//40
 System.out.println(a.sum1());//30    
}

7.多态的应用

1.多态数组

​ *数组的定义类型为父类类型,里面保存的实际元素类型为子类类型

class Teacher extends Person
{
    String name;
    int salary;
    public void say(){}
    public void teach(){}
}

class Student extends Person
{
	String name;
    int score;
    public void say(){}
    public void study(){}
}

class Person
{
    public void say(){}
}

main()
{
    Person[] persons = new Person[5];
    
   persons[0] = new Person("jack", 20);
    persons[1] = new Student("jack",18,100);
    persons[2] = new Teach("scott" ,30 ,20000);
    
    for(int i = 0;i<3;i++)
    {
        System.out.println(persons[i].say());//动态板顶机制
        if(persons[i] instancof Student)
        {
            Student student = (Student)persons[i];//向下转型
            student.study();
        }else if(persons[i] instanceof Teacher)
        {
            Teacher teacher = (Teacher)persons[i];
            teacher.teach();
        } else
        {
            System.out.println("你的类型有误,请自己检查...")
        }
    }
}
2.多态参数

​ *方法定义的形参类型为父类类型,实参类型允许为子类类型

1.6 Object类

在这里插入图片描述

1.equals方法

​ * == 是一个比较运算符

1.==:既可以判断基本类型,又可以判断引用类型

2.==:如果判断基本类型,判断的是值是否相等

3.==:如果判断引用类型,判断的是地址是否相等,即判定是不是同一个对象

4.equals:是Object类的方法,只能判断引用类型

5.默认判断的是地址是否相等,子类中往往重写该方法,用于判断内容是否相等。比如Integer,String

2.重写equals方法

class Person
{
	private String name;
    private int age;
    private char gender;
    
    //重写Object的equals方法
    public boolean equals(Object obj)
    {
        if(this == obj)
        {
            return true;
        }
    }
    //类型判断
    if(obj instanceof Person)
    {
        //是Person,我们才比较
        Person p = (Person)obj;
        return this.name.equals(p.name) && this.age == p.age && this.gender == p.gender;
    }
    
    //如果不是Person类型,则直接返回false
    return false;
}

1.7 hashCode

​ *hashCode返回该对象的哈希码值

​ *总结:

1.提高具有哈希结构的容器的效率

2.两个引用,如果指向的是同一个对象,则哈希值肯定是一样的

3.两个引用,如果指向的是不同对象,则哈希值是不一样的

4.哈希值主要根据地址号来的,不能完全将哈希值等价于地址

1.8 toString

​ *返回该对象的字符串表示

​ *基本介绍

1.默认返回:全类名(包名 + 类名) + @ + 哈希值的十六进制

2.当直接输出一个对象时,toString会被默认调用

System.out.println(monster);
System.out.println(monster.toString());

//这两个是等价的

1.9 finalize

1.当对象被回收时,系统自动调用该对象的finalize方法,子类可以重写该方法,做一些释放资源的操作

2.什么时候被回收:当某个对象没有任何引用时,则jvm就认为这个对象是一个垃圾对象,就会使用垃圾回收机制来销毁该对象,在销毁对象前,会先调用finalize方法

3.垃圾回收机制的调用,是由系统来决定,也可以通过System.gc()主动触发垃圾回收机制

main()
{
	Car bmw = new("宝马");
    bmw = null;
    System.gc();	//主动调用垃圾回收器
}

1.10 断点调试(debug)

1.在开发中,新手程序员在查找错误时,这时老程序员就会温馨提示,可以用断点调试,一步一步的看原码执行的过程,发现错误

2.在断点调试过程中,是运行状态,是以对象的运行类型来执行的

1.断点调试介绍

1.断点调试是指在程序的某一行设置一个断点,调试时,程序运行到这一行就会停住,然后可以一步一步往下调试,调试过程中可以看各个变量当前的值

2.断点调试的快捷键

F7(跳入) :跳入方法内

F8(跳过) :逐行执行代码

shift + F8(跳出)

F9(resume,执行到下一个断点)

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

如何魔改 diffusers 中的 pipelines

如何魔改 diffusers 中的 pipelines 整个 Stable Diffusion 及其 pipeline 长得就很适合 hack 的样子。不管是通过简单地调整采样过程中的一些参数&#xff0c;还是直接魔改 pipeline 内部甚至 UNet 内部的 Attention&#xff0c;都可以实现很多有趣的功能或采样生图结果。 本…

如何编写一份完整的软件测试报告

软件测试是软件开发过程中一个非常重要的环节&#xff0c;它有助于确保软件的质量和稳定性。编写一份完整的软件测试报告是软件测试工作的重要组成部分&#xff0c;它不仅可以帮助测试团队记录测试结果和发现的问题&#xff0c;还可以为开发团队提供有价值的反馈和改进建议。下…

我独自升级崛起下载慢/下载不了/无法下载的解决方法

我独自升级是一款RGP游戏&#xff0c;以充满独特的画风以及新的类型的挑战得到玩家们的喜爱。通过打怪、完成任务、参加活动等方式获得经验值&#xff0c;合理分配技能点数和属性点数&#xff0c;以适应不同阶段的挑战需求。掌握装备掉落、合成、升级机制&#xff0c;及时更换更…

ubuntu安装nginx以及开启文件服务器

1. 下载源码 下载页面&#xff1a;https://nginx.org/en/download.html 下载地址&#xff1a;https://nginx.org/download/nginx-1.24.0.tar.gz curl -O https://nginx.org/download/nginx-1.24.0.tar.gz2. 依赖配置 sudo apt install gcc make libpcre3-dev zlib1g-dev ope…

中药提取物备案数据库<5000+中药提取物>

NMPA中药提取物备案数据库的建立是确保中药提取物质量安全、规范生产行为、加强监管、保障公众用药安全、促进产业发展和国际化的重要措施。 通过查询中药提取物备案信息我们能了解到中药提取物的实用备案号、药品通用名称、药品生产企业、批准文号、备案日期、备案状态、中药…

Mysql启动报错:本地计算机上的mysql服务启动后停止,某些服务在未由其他服务或程序使用时将自动停止

Mysql启动报错&#xff1a;本地计算机上的mysql服务启动后停止,某些服务在未由其他服务或程序使用时将自动停止 文章目录 Mysql启动报错&#xff1a;本地计算机上的mysql服务启动后停止,某些服务在未由其他服务或程序使用时将自动停止1. 备份mysql的data文件夹2. 重新构建 Wind…

智能照明控制系统的节能优势及其应用

【摘要】&#xff1a;通过智能照明控制系统与传统照明控制的对比&#xff0c;阐明智能照明控制系统的优势&#xff0c;基本组成、在智能建筑中的应用效果以及其实施存在的问题和前景展望。 安科瑞薛瑶瑶18701709087 【关键字】&#xff1a;智能照明控制&#xff1b;系统组成&…

【御控物联】 JavaScript JSON结构转换(21):数组To对象——综合应用

文章目录 一、JSON结构转换是什么&#xff1f;二、术语解释三、案例之《JSON数组 To JSON对象》四、代码实现五、在线转换工具六、技术资料 一、JSON结构转换是什么&#xff1f; JSON结构转换指的是将一个JSON对象或JSON数组按照一定规则进行重组、筛选、映射或转换&#xff0…

医院智慧手术麻醉系统管理源码 C# .net有演示

医院智慧手术麻醉系统管理源码 C# .net有演示 手术麻醉管理系统(DORIS)是应用于医院手术室、麻醉科室的计算机软件系统。该系统针对整个围术期&#xff0c;对病人进行全程跟踪与信息管理&#xff0c;自动集成病人HIS、LIS、RIS、PACS信息&#xff0c;采集监护等设备数据&#x…

【THM】Protocols and Servers 2(协议和服务器 2

介绍 协议和服务器房间涵盖了许多协议: 远程登录HTTP协议文件传输协议邮件传输协议POP3IMAP实现这些协议的服务器会受到不同类型的攻击。仅举几例,请考虑: 嗅探攻击(网络数据包捕获)中间人 ( MITM ) 攻击密码攻击(身份验证攻击)漏洞从安全的角度来看,我们始终需要思考…

基于SSM的宠物管理系统

点击以下链接获取源码: https://download.csdn.net/download/qq_64505944/89076676?spm=1001.2014.3001.5503 技术:SSM(Spring+SpringMVC+MyBatis)+LayUI+Echarts技术栈,分页采用pagehelper插件,EasyExcel进行Excel文件的导入导出。 宠物管理系统 1 CHINER-宠物管理系…

算法刷题Day27 | 39. 组合总和、40.组合总和II、131.分割回文串

目录 0 引言1 组合总和1.1 我的解题 2 组合总和II2.1 解题 3 分割回文串3.1 切割3.2 总结&#xff1a;分割和组合的区别 &#x1f64b;‍♂️ 作者&#xff1a;海码007&#x1f4dc; 专栏&#xff1a;算法专栏&#x1f4a5; 标题&#xff1a;算法刷题Day27 | 39. 组合总和、40.…

OpenHarmony实战开发-多设备自适应能力

介绍 本示例是《一次开发&#xff0c;多端部署》的配套示例代码&#xff0c;展示了页面开发的一多能力&#xff0c;包括自适应布局、响应式布局、典型布局场景以及资源文件使用。 说明&#xff1a; 自适应布局能力仅可以保证在外部容器大小在一定范围内变化时&#xff0c;容…

考研数学|张宇《1000题》做不下来,怎么办?

张宇的1000题对于初学者 来说确实有一些难度&#xff0c;我的建议是刷完知能行之后再做1000题。 首先&#xff0c;让我们来看看传统习题册存在的一些问题。虽然传统习题册通常会覆盖考试的各个知识点和题型&#xff0c;但其中一些问题在于它们可能过于注重题目的数量&#xff…

性能分析-nginx

tomcat 像kyj项目请求直接对接 tomcat&#xff0c;tomcat的连接池就会直接影响“并发用户数” 如果这种情况下做性能测试的时候&#xff0c;并发用户数不能满足要求&#xff0c;可以适当加大线程池的配置。 如&#xff1a;项目性能测试发现项目所在机器&#xff0c;资源利用率…

产品推荐 | 瑞苏盈科基于立体帧捕捉和视频处理应用的火星Mars EB1开发板

01 产品概述 火星Mars EB1底板是为火星Mars系列FPGA和SoC核心板设计的通用底板&#xff0c;非常适用于立体帧捕捉和视频处理应用&#xff0c;可以为构建基于FPGA的定制化硬件系统提供一个良好的基础和开端。 02 核心亮点 ■ 与所有火星Mars系列FPGA和SoC核心板兼容 ■ 适用…

Stable Diffusion文生图技术详解:从零基础到掌握CLIP模型、Unet训练和采样器迭代

文章目录 概要Stable Diffusion 底层结构与原理文本编码器&#xff08;Text Encoder&#xff09;图片生成器&#xff08;Image Generator&#xff09; 那扩散过程发生了什么&#xff1f;stable diffusion 总体架构主要模块分析Unet 网络采样器迭代CLIP 模型 小结 概要 Stable …

windows一键休眠,一键唤醒

1.使windows睡眠不可用&#xff0c;cmd以管理员身份运行&#xff1a; powercfg.exe /hibernate off 2.桌面创建快捷键 Rundll32.exe Powrprof.dll,SetSuspendState Sleep

王权与自由国际服测试资格申请 王权与自由steam国际服预约教程

《王权与自由》是一款由《剑灵》开发商NCsoft公开的旗下大型多人MMORPG新作游戏作品。攻城战&#xff0c;这是游戏中的一个重要玩法&#xff0c;主要分为攻城方和防守方。攻城方需要占领外城的遗址&#xff0c;并利用高轮&#xff08;包括碎石机、跳跃者和战斗航母&#xff09;…

蓝桥杯第六届c++大学B组详解

前言&#xff1a; 看了很多博客以及视频讲解&#xff0c;感觉都不是很清楚&#xff0c;比较模棱两可&#xff0c;所以干脆自己一边想&#xff0c;一边写博客&#xff0c;也可帮助到其他人&#xff0c;都是根据自己的逻辑来尽量清楚简单的讲清楚题目&#xff0c;喜欢的不要吝啬三…