JAVA09-多态、向上向下转型、“==”和equal()的区别、final关键字

Java-Study 基础环境搭建。 阅读详情

多态
多态指的是同一种行为在不同的对象身上有不同的表现形式

多态的实现条件
1.要有继承
2.要有重写
3.父类引用指向子类对象
举个例子:
Person p = new Student();
这是一种向上转型
此时p只能使用父类Person中有的属性
以及在Student类中重写的父类具有的方法。

向上转型:会隐藏掉对象本身扩展的内容

Cat c=new Cat();
Animal a=c;//在向上转型的过程中,会隐藏掉对象本身独有的内容
Animal a=new Cat();

向下转型:
1.指向父类对象的父类引用不能转换为子类类型

Animal a=new Animal();
Cat c=(Cat)a;

上述写法是错误的,会报java.lang.ClassCastException一个异常
编译不会报错,但是运行会报错

2.指向子类对象的父类引用能转换为该子类类型

Animal a=new Cat();
		//a.upTree();//报错
//当你想拿回子类对象被隐藏的属性和方法时,需要做向下类型转换,(强制类型转换)
		Cat c=(Cat) a;
		c.upTree();//可以

总结:
1.父类引用可以指向子类对象,但子类引用指向不了父类对象
2.把子类对象直接赋值给父类引用叫做向上转型,向上转型不用强制转化 Animal a= new Cat()
3.向上转型会丢失子类的特有方法和属性
4.把指向子类对象的父类引用赋值给子类叫做向下转型,必须要强制类型转换(前提是分能不能转型)
Animal a= new Cat()
Cat c=(Cat)a;

instanceof
是用来判断引用所指向的对象是不是某个类型

Animal a= new Cat()
 
//instanceof 返回类型为boolean
boolean b=a instanceof Cat;//b=true
boolean b=a instanceof Animal;//b=true

在做向下转型时,强制要求必须要做instanceof判断

Animal a= new Cat();
	if(a instanceof Cat){
		Cat c=(Cat)a;
	}else if(a instanceof Dog){
		Dog d=(Dog)a;
	}

Object常用方法
任何类都是继承于Object(万物皆对象)
equals() 判断内容是否相等
重写equals()

  @Override
    public boolean equals(Object obj) {
        if (this == obj) {
            return true;
        }
        if (obj == null) {
            return false;
        }
        if (obj instanceof Person) {
            Person p = (Person) obj;
            if (this.name.equals(p.name) && this.age == p.age) {
                return true;
            }
        }
        return false;
    }

"=="与equal()的区别
1."“修饰基本数据类型,比较的是值是否相等
2.”
"修饰引用数据类型时,比较的是所指向对象的内存地址是否相同

equal()
1.equal()方法用于object类(没有被重写)
则比较的是引用数据类型所指向的内存地址
2.equal()方法用于String类(被重写了)
则比较的是所指向对象的内容是否相同。

final关键字
final最终的,final修饰的类不能被继承,final修饰方法不能被重写,final修饰的变量不能被改变。如果final修饰引用,那么表示引用不可变但引用指向的内容可变,被final修饰的方法.JVM会尝试将其内联,以提高效率,被final修饰的常量在编译阶段会存入常量池中。

CodeBlocks如何将英文环境改为中文 一、下载汉化包(链接如下) 链接:https://pan.baidu.com/s/166U9WGPbJXu2hyD7q9EiJQ 提取码:2333 二、选择路径 将汉化包中的文件(CodeBlocks.mo、zh_CN.mo、zh_CN.po)放到CodeBlocks安装路径下的​​​​​​CodeBlocks/share/CodeBlocks/locale/zh_CN文件夹中,路径中的文件夹没有就新建。 注:此处需严格按照要求来,切勿自定义文件夹名 三、内部调试 打开CodeBlocks,.. 阅读详情

相关推荐

UVM概述及uvm_component和uvm_object(一)

UVM:Universal Verification Methodology(通用验证方法学) UVM:是建立在systemverilog平台上的一个库,提供了一系列的接口,让我们能够更方便的进行验证。验证平台组成: Driver:用来把不同的激励施加给DUT; Monitor:用来检测DUT的输出; Scoreboard:专门用来比较期望值与monitor检测到的DUT输出; Refer

南国之邱 1万+

equal,final,==以及抽象类

系统已经重写过equals方法的四大类:java.io.Filejava.lang.Stringjava.util.Date八种封装类它们在比较两个对象的时候,只看类型和内容,无论是否为同一对象.其他的类,如果要比较内容就要重写equals方法 比较基本数据类型要用==号,而比较字符串一定用equals final和private不能同时使用,因为final是无法被继承,而private也是...

初心不负 149

Kotlin原生AI Agent框架Koog:为JVM开发者打造类型安全、企业级智能体开发方案

AI Agent作为当前人工智能应用开发的核心范式,通过赋予大语言模型(LLM)自主规划、工具调用和环境交互能力,正在重塑软件智能化进程。其技术原理基于智能体架构,通过提示工程、函数调用和记忆机制,将LLM从单纯的文本生成器转变为能够执行复杂任务的工作流引擎。这一技术价值在于显著降低了构建智能应用的开发门槛,同时保持了高度的灵活性和可扩展性。在实际应用场景中,AI Agent广泛落地于智能客服、代码助手、数据分析自动化等领域,成为连接大模型能力与具体业务需求的关键桥梁。本文聚焦的Koog框架,正是针对JVM

weixin_42594419的博客 396

java String final + equal == 区别

java String 是不可改变的类型。 String a = "hello2"; String d = "hello"; final String b = "hello"; String c = b + "2";// final相当于常量,编译阶段直接加入常量池 String cc = “hello”+“2”; 类似于 final修饰的,在编译期间,会自动优化处理为:...

weixin_30895603的博客 194

Unity-Chan Toon Shader卡通渲染学习

2.0 (UTS2)是一款用于图像和视频的卡通着色器,旨在满足从事卡通着色 3DCG 动画的创作者的需求。二、从0-1复刻UTS21.漫反射UTS2的漫反射部分主要有三个层组成,分别是基本颜色、第一阴影色和第二阴影色,分别对应着美术理论中的白、灰、黑。

qq_63133691的博客 2542

数字通信:信源编码、信道编码、调制、物理信道、解调、信道解码、信源解码

在通信系统中,信息的传输通常需要经过一系列的处理步骤,确保数据可以在信道中高效且可靠地传输。以下是信源编码、信道编码、调制、物理信道、解调、信道解码、信源解码的具体含义及其常见技术的解释。

weixin_44012667的博客 4810

Java之多态,向上向下转型,重写父类的equals方法

1,多态是什么? 把子类的实例化对象赋值给父类的引用类型 继承 Fu f=new Zi(); Pet p=new Dog(); Pet p=new Penguin(); 重写 f.a(); 多种状态 多态=继承+重写 2,多态的向上

weixin_44889894的博客 417

基于YOLOv8的智能肿瘤检测系统:从图像到诊断的深度学习应用——含代码和论文

本文提出了一种基于YOLOv8深度学习的智能肿瘤检测系统,用于医学影像(CT/MRI/X光)的自动分析与诊断。针对传统人工阅片效率低、主观性强的问题,系统采用最新的YOLOv8目标检测算法,通过改进的C2F骨干网络、Anchor-Free检测头和解耦头等创新设计,实现高效精准的肿瘤定位。文章详细阐述了模型架构、数据处理流程、训练优化方法及PyQt5用户界面开发,为临床提供可靠的AI辅助诊断工具。实验结果表明,该系统在速度和准确率上达到良好平衡,有望提升肿瘤早期筛查效率。

FJN110的博客 200

java父类子类上下转型总结 和 equals==的理解

关于这个问题,一般初中级面试中都会遇到,还记得我当初实习找工作的时候也遇到了这个问题,现在都还记得自己是怎么回答的:== 是基本类型比较,equals 是对象比较,不懂 hashCode,想起来简直惨不忍睹。于是找了一点小时间,研究了一番整理成文章供大家参考。 == 是什么? 在《java核心技术卷 1》中将 ==归类于关系运算符; ==常用于相同的基本数据类型之间的比较,也可用于相同类型的...

sun20209527的专栏 1875

从零开始做对容量规划:一文讲透 SAP Greenfield sizing 与 Quick Sizer 落地方法

摘要 SAP项目早期硬件规划面临业务细节缺失的挑战,Greenfield sizing方法通过Quick Sizer工具将业务需求转化为硬件资源需求。该方法聚焦主要负载驱动因素而非精确预测,采用标准化问卷形式输入并发用户数、业务处理量等参数,输出内存、CPU等资源需求。关键步骤包括选择正确的Quick Sizer版本、创建sizing项目、参考SAP基准测试和认证目录校准结果,最终将需求交由硬件厂商落地。该方法特别适用于缺乏历史数据的新系统部署,帮助在不确定性中建立可控的容量规划模型,避免资源浪费或性能不足

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 216

从 SAP Gateway 旧 add-ons 卸载到 SAP S/4HANA 转换的清理路线

摘要: SAP Gateway系统的维护难点往往源于历史遗留组件的堆积,而非OData服务本身的复杂性。早期系统为支持多种服务类型而安装的各类add-ons(如IW_SCS、IW_CNT、GW_CORE等),随着系统升级和团队更替逐渐成为技术负债。自SAP NetWeaver 7.40起,核心功能已整合至SAP_GWFND组件,使架构显著简化。在向S/4HANA迁移时,需重点清理已废弃的add-ons(如IW_SCS、IW_GIL等),但必须谨慎验证其关联服务是否仍被调用。组件清理需结合系统日志和调用链分析

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 424

java中==和equals的使用,向下转型,强转

aliven1的博客 336

Android Audio基础——系统服务(二)

AudioService 继承自 IAudioService.Stub。IAudioService.Stub 类很明显是通过 IAudioService.aidl 自动生成的。AudioService 位于 Binder Native 端。AudioManager 拥有 AudioService 的 Binder Proxy 端,是 AudioService 在客户端的一个代理。几乎所有客户端对 AudioManager 进行的请求,最终都会交由 AudioService 实现。

小旭的专栏 2075

Day09 面向对象(覆写、final、多态、abstract、Interface、Object)

abstract是修饰符,表示抽象的,用来修饰抽象类和抽象方法;用abstract修饰的类是抽象类,并且抽象类不能创建对象,而且抽象类一般主要是用于被继承。注意:abstract和final不能同时出现。子类如果继承了抽象类,那么需要实现所有抽象方法,否则该子类就需要用abstract修饰;普通类继承抽象类需要实现所有抽象方法;抽象类继承抽象类,需要实现0~N个抽象方法;抽象类可以看做特殊的类,类能做的它都能做,只不过,抽象类不能创建对象,但是可以有变量、构造方法、抽象方法、成员方法。

m0_70140144的博客 187

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

Java_1_09

继承 一个类的对象可以使用另一个类的对象里的成员变量和成员方法 类是对对象的抽象,继承是对某一批类的抽象,从而实现对现实世界更好的建模。 提高代码的复用性! extands 的意思是“扩展”。子类是父类的扩展 不同的叫法:超类、父类、基类、子类、派生类 好处: 通过继承可以简化类的定义,实现代码的复用性 让类与类之间产生了关系,这是多态的前提条件 开发原则:高内聚,低耦合 坏处: 提高了代码的耦合性 特点: java中只有单继承,不可以多继承;可多层继承,不可循环继承 java中的多继承,可以

TurborX的博客 302

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

2020-09-12(一周总结 week3)

1.什么是类?什么是对象? 类是对象的抽象,对象是类的实例化。 2.构造方法作用? 构造方法是用来初始化对象的,方法名与类名相同。 可以自动生成,但是写了有参的要注意写上无参的。 3.写一个类? 1.根据类的静态属性,写几个成员方法,注意突出特征; 2.写两个构造方法,一个有参,一个无参(Alt+Shift+s-->...using Fieds...); 3.根据行为写几个方法; 4.快捷键生成toString方法(Alt+Shift+s-->toString).

吳槑槑的博客 118

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

Java基础09-抽象类与多态

注意:  1.System.out.println(1 + new Person("abc")); //出错  2.equals()的重写实例:   @Override   public boolean equals(Object obj) {   //形参是Object类型,必须在下面使用向下转型才能使用子类的特有方法,使用instanceof进行辅助检查,达到最后的比较目的    i

monghuan的专栏 802

09 继承

1 继承(1) 2 类是对对象的抽象,继承是对某一批类的抽象,从而实现对现实世界更好的建模。 3 提高代码的复用性! 4 extends的意思是“扩展”。子类是父类的扩展 5 6 父类:超类、基类、 子类:派生类 7 小结: 8 继承的作用:通过继承可以简化类的定义,实现代码的重用 9 10 子类继承父类的成员变...

weixin_30925411的博客 90

2021-09-25

1.JDK,JRE,JVM三者关系 、jdk是JAVA程序开发时用的开发工具包,其内部也有JRE运行环境JRE。 、JRE是JAVA程序运行时需要的运行环境,就是说如果你光是运行JAVA程序而不是去搞开发的话,只安装JRE就 能运行已经存在的JAVA程序了。 、JDk、JRE内部都包含JAVA虚拟机JVM,JAVA虚拟机内部包含许多应用程序的类的解释器和类加载器等等。 2.面向过程和面向对象的区别 a.、两者都是软件开发思想,先有面向过程,后有面向对象。在大型项目中,针对面向过...

Tjingzhou的博客 66

初始面向对象03

override重写 重写和重载(overload)的区别: 二者都是作用于方法的。 重载是同类中多个方法,方法名相同,参数列表不同,就可以构成重载(作用于同一个类种)。 重写是子类中存在父类中集成度额功能,但是子类对功能的实现与父类不一样,可以对这个功能的方法进行重写(作用于不同的类父类,子类)。 注意:私有的内容不能被继承和重写;static修饰的方法不能被重写,如果子父类中的签名相同的方法,...

li18206116926的博客 117

视频教程-Java程序员面试宝典视频课程之面向对象(六)-Java

Java程序员面试宝典视频课程之面向对象(六) Java讲师,多年培训经验,...

weixin_30865711的博客 146

面向对象(下)

final修饰的局部变量,一旦赋值不能重新赋值。 final修饰的方法? final修饰的方法无法被覆盖,被重写。 例子: final修饰的类? final修饰的类无法继承。 总结:final修饰的变量,只能赋一次值。 02.抽象类 1.什么是抽象类? 1)类与类之间具有共同特征,将这些共同特征提取出来,形成的就是抽象类。 2)类本身是不存在的,所以抽象类无法创建对象,即无法实例化。 2.抽象类输入什么类型? 抽象类也属于引用数据类型 3.抽象类怎么定义? 语法: [修饰符列表] abstract clas

m0_66689823的博客 788

C 语言学习笔记

B站up Micro_Frank C语言大师系列课程笔记

g_c_m_g的博客 1225

CPU 缓存 | 原理、映射、一致性

……

u013669912的博客 410

【java特性_面向对象】多态 向上转型 向下转型 equals()方法重写中的向下转型

多态 向上转型 向下转型 equals()方法重写中的向下转型

ityin的博客 348

最近5年183个Java面试问题列表及答案[最全]

Java 面试随着时间的改变而改变。在过去的日子里,当你知道 String 和 StringBuilder 的区别(String 类型和 StringBuffer 类型的主要性能区别其实在于 String 是不可变的对象。因此在每次对 String 类型进行改变的时候其实都等同于生成了一个新的 String 对象,然后将指针指向新的 String 对象,所以经常改变内容的字符串最好不要用 Str...

weixin_34122548的博客 3337
上一篇: JAVA08-局部变量成员变量、static关键字、继承、重写重载关系知识梳理
下一篇: JAVA10-抽象类(抽象方法)、接口的相关知识
X_C~!
博客等级 码龄6年 4粉丝 34原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值