Java面向对象——多态、Object类、instanceof关键字以及final关键字

news2024/9/19 10:52:11

多态的概念

1.多态是指同一个方法调用可以在不同的对象上有不同的表现,即同一种方法调用方式适用于不同的数据类型。
编译时和运行时:
	编译时期调用的是父类中的方法,但运行时期会根据实际的对象类型来调用适当的方法。
	这种行为称为动态绑定,即运行时决定调用哪个方法。
2.接口也可以实现多态性。
3.实现多态的条件:
	继承关系、方法重写,以及父类引用指向子类对象是实现多态性的关键条件。
4.父类引用指向子类对象:
	可以使用父类的引用来指向子类的对象,这样就可以通过统一的接口来调用不同子类的方法。
	子类继承父类,并且子类重写父类的方法。
	此处,需要注意的是如果向上转型后,父类需要调用子类新增的方法,
可以通过向下转型的方法【即把父类转换为子类实现】
4.1向上转型:
	将子类的对象赋值给父类的引用称为向上转型。这种转型不需要显式地进行,编译器会自动进行类型检查。
4.2向下转型:
	将父类的引用转为子类的引用称为向下转型。需要使用强制类型转换,但在进行之前最好使用 instanceof 进行类型检查,以避免异常。
**口诀:【调用实例方法看等号==右边】【调用静态方法看等号==左边】**

总之,多态是面向对象编程中一个非常重要的概念,通过它可以实现统一的接口来操作不同的对象,提高代码的可读性和可维护性。在实际编程中,多态性的使用可以使代码更加灵活和扩展性更强。方法重写是实现多态的基础。
在这里插入图片描述

instanceof关键字的介绍

instanceof 用于在运行时检查一个对象是否是特定类的实例,或者是否实现了特定接口。
1. 判断对象是否是特定类的实例:
2. 判断对象是否实现了特定接口:
3. 多层次继承中的判断: instanceof 也可以在多层次继承关系中使用。
4. 避免滥用 instanceof: 虽然 instanceof 可以用于类型检查。但在面向对象的设计中,通常应该倾向于使用多态和继承来避免大量的 instanceof 检查。
5. 使用 instanceof 与类型转换: instanceof 可以与类型转换(强制类型转换)一起使用,以确保转换的安全性。

final关键字

1. final 变量: 用于声明一个常量,一旦赋值后就不能再修改。
2. final 方法: 用于阻止子类对该方法的重写(覆盖)。
3. final 类: 用于表示一个类不能被继承。
4. final 参数: 用于表示方法参数在方法内不能被修改。
5. final 引用: 用于表示引用指向的对象不能被修改,但对象本身的属性可以被修改(对于非基本类型)。
6. final 静态变量: 用于表示一个静态变量是一个常量,通常用大写命名。
7. final 数组: 用于表示数组引用不可更改,但数组内的元素可以更改。

Object类

1. equals(Object obj) 方法:
	用于比较两个对象是否相等。默认情况下,它比较的是对象的引用,但你可以在你的类中重写这个方法以自定义比较逻辑。
2. hashCode() 方法:
	返回对象的哈希码值。在使用集合(如哈希表)时,哈希码用于确定对象在内存中的存储位置。
3. toString() 方法:
	返回对象的字符串表示。默认情况下,这是对象的类名 + @ + 对象的哈希码。你可以在你的类中重写这个方法,以便自定义字符串表示。
4. getClass() 方法:
	返回对象所属的类的 Class 对象。Class 对象提供了有关类的信息,包括类名、方法、字段等。
5. wait(), notify() 和 notifyAll() 方法:
	用于在多线程环境下进行线程通信。这些方法只能在同步代码块中使用,用于唤醒等待中的线程。而且通常与锁机制一起使用。
6. wait() 方法:
	用于在线程之间进行等待,直到其他线程唤醒它。也需要在同步代码块中使用。
7. finalize() 方法:
	通常不建议使用,因为 Java 中的垃圾回收机制会自动释放对象占用的资源。
	由垃圾回收器在回收对象之前调用。通常不建议使用,因为不同的 JVM 行为可能不同。
8. clone() 方法:
	用于创建并返回对象的副本。需要注意的是,这个方法的默认实现是浅拷贝,即对象内部的引用也会被共享。
关于equals方法的重写:
	/**
 * 重写 equals 要求:
 * 对 null 返回 false
 * 自反性:x.equals(x) 返回true
 * 对称性: x.equals(y) 的值 和 y.equals(x) 的值一样
 * 传递性: x.equals(y) 为 true, y.equals(z) 为 true, 此时 x.equals(z) 为 true
 * 一致性: x.equals(y) 多次调用结果一致
 *  重写了 equals 就要重写 hashCode    
 *  */ 

重写如下所示

@Override
    public boolean equals(Object obj) {
        // this【当前对象】   obj【需要比较的对象】
        if (obj == null) {
            return false;
        }
        if (this == obj) {
            return true;
        }
        // 学生是同一个对象要求是 学号一样就是同一个
        // 类型转换, 有继承关系 向上转型 和 向下转型
        // Student --> Object  向上转型
//        Object o = this;

        // Object --> student 向下转型 强制类型转换

        Student stu = (Student) obj;

        if (stu.id == this.id || stu.id.equals(this.id)) {
            return true;
        }
        return false;
    }

关于hashCode方法的重写:

 /*
        equals 结果为 true hashCode 值一样
        hashCode 一样 equals 结果不一定
     */
    @Override
    public int hashCode() {
       int result = 1;
       result = 31 * result + name.hashCode();
       result = 31 * result + age;
       result = 31 * result + gender;
       result = 31 * result + id.hashCode();

       return result;
    }

重写toString方法:

@Override
  public String toString() {
      return "Student{" +
              "name='" + name + '\'' +
              ", age=" + age +
              ", gender=" + gender +
              '}';
  }

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

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

相关文章

自注意力机制简介Transformers: Attention is all you need

“Attention is All You Need” 是一篇由Google研究人员在2017年发表的研究论文,该论文介绍了Transformer模型,这是一种革命性的架构,它彻底改变了自然语言处理(NLP)领域,并成为我们现在所知道的LLMs的基础…

剪枝基础与实战(1): 概述

本文介绍基于L1正则化的剪枝原理,并以VGG网络进行实战说明。将从零详细介绍模型训练、稀疏化、剪枝、finetune的全过程,提供详细的源码及说明,有助于对剪枝的熟练掌握,后续也会对yolov8进行剪枝的介绍。 论文: Learning Efficient Convolutional Networks through Network …

学习笔记|基于Delay实现的LED闪烁|模块化编程|SOS求救灯光|STC32G单片机视频开发教程(冲哥)|第六集(下):实现LED闪烁

文章目录 2 函数的使用1.函数定义(需要带类型)2.函数声明(需要带类型)3.函数调用 3 新建文件,使用模块化编程新建xxx.c和xxx.h文件xxx.h格式:调用头文件验证代码调用:完整的文件结构如下&#x…

PyTorch学习笔记(十七)——完整的模型验证(测试,demo)套路

完整代码: import torch import torchvision from PIL import Image from torch import nnimage_path "../imgs/dog.png" image Image.open(image_path) print(image)# 因为png格式是四个通道,除了RGB三通道外,还有一个透明度通…

利用“病毒制造机”实现脚本病毒的制造

一、脚本病毒的概念: 脚本病毒通常是 JavaScript 或 VBScript 等语言编写的恶意代码,一般广告性质,会修改 IE 首页、修改注册表等信息,对用户计算机造成破坏。 通过网页进行的传播的病毒较为典型,脚本病毒还会有如下前…

【LeetCode-中等题】128. 最长连续序列

题目 题解一:HeshSet枚举 思路:先对数组进行set去重,核心就是,先找出临界值(假设以最小临界为例,那么这个临界值自己就是最小值,),以临界值不断做加1操作,看…

Kotlin 使用 View Binding

解决的问题: 《第一行代码——Android》第三版 郭霖 P277 视图绑定的问题 描述: kotlin-android-extensions 插件已经弃用 butter knife 已经弃用 解决办法 推荐使用 View Binding 来代替 findViewById 使用方法 1、配置 build.gradle 2、在act…

【MySQL系列】SQL语句入门(创建删除操作)、字符集和数据类型详解

💐 🌸 🌷 🍀 🌹 🌻 🌺 🍁 🍃 🍂 🌿 🍄🍝 🍛 🍤 📃个人主页 :阿然成长日记 …

Docker安装并配置镜像加速器,镜像、容器的基本操作

目录 1.安装docker服务,配置镜像加速器 (1)安装依赖的软件包 (2)设置yum源,我配置的阿里仓库 (3)选择一个版本安装 (4)启动docker服务,并设置…

WaSender 3.0 全功能版--Crack

WaSender – Is Windows software which runs on PC, a solution to automatically send messages to your bulk customers and Groups.​ Features:- Unlimited WhatsApp Messages to Contact / Numbers Send messages to all contacts including contacts not saved in your…

C#面向对象程序设计之变量的作用域,深入浅出 入门和进阶教程3

1、效果镇楼: 最近忒忙了!真的忙到不可开交的呢,繁杂业务的处理真的不是您,我个人想象的样子,完全比您个人想象的要复杂至少三倍以上的难度!也是客观事实。 菜鸟程序员面临的客观残酷现实!尤其您这个年龄阶段,实在是堪忧,尴尬的很啊,非常严峻的形势,也可以说特别严峻…

docker导出、导入镜像

导出镜像到本地,然后可以通过压缩包的方式传输。 导出:docker image save 镜像名:版本号 > /home/quxiao/javatest.tgz 导入:docker image load -i /home/quxiao/javatest.tgz 删除镜像就得先删除容器,当你每运行一次镜像&…

Hadabot:从网络浏览器操作 ROS2 远程控制器

一、说明 Hadabot Hadabot是一个学习ROS2和机器人技术的机器人套件。使用 Hadabot,您将能够以最小的挫败感和恐吓来构建和编程物理 ROS2 机器人。Hadabot套件目前正在开发中。它将仅针对ROS2功能,并强调基于Web的用户界面。 随着开发的进展&a…

classloader的讲解

我们先从Activity的启动流程开始切入: //位于android/app/ActivityThread.java中 private Activity performLaunchActivity(ActivityClientRecord r, Intent customIntent) {// ........省略代码//通过反射创建activityjava.lang.ClassLoader cl appContext.getCl…

LLM架构自注意力机制Transformers architecture Attention is all you need

使用Transformers架构构建大型语言模型显著提高了自然语言任务的性能,超过了之前的RNNs,并导致了再生能力的爆炸。 Transformers架构的力量在于其学习句子中所有单词的相关性和上下文的能力。不仅仅是您在这里看到的,与它的邻居每个词相邻&…

无重复字符的最长子串——力扣3

滑动窗口 int lengthOfLongestSubstring(string s){int n=s.size();unordered_set<char

在jupyter notebook中使用海龟绘图

首先&#xff0c;安装ipyturtle3 ref:ipyturtle3 PyPI pip install ipyturtle3然后&#xff0c;安装ipycanvas ipycanvas是一个需要安装在与JupyterLab实例相同环境的包。此外&#xff0c;您需要安装nodejs&#xff0c;并启用JupyterLab ipycanvas小部件。 所有这些都在ipy…

阿里云2核4G服务器配置汇总表_轻量和ECS

阿里云2核4G服务器配置价格表&#xff0c;297元一年&#xff0c;配置为轻量应用服务器2核4G、4M带宽、60GB高效云盘&#xff0c;折合24元一个月。 目录 2核4G服务器轻量&#xff1a; 2核4G服务器ECS 关于轻量和ECS的区别&#xff1a; 2核4G服务器轻量&#xff1a; 云服务器…

2023前端面试笔记 —— HTML5(持续收集更新)

系列文章目录 内容链接2023前端面试笔记HTML5 文章目录 系列文章目录前言一、HTML 文件中的 DOCTYPE 是什么作用二、HTML、XML、XHTML 之间有什么区别三、前缀为 data- 开头的元素属性是什么四、谈谈你对 HTML 语义化的理解五、HTML5 对比 HTML4 有哪些不同之处六、meta 标签有…