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

这篇具有很好参考价值的文章主要介绍了Java面向对象——多态、Object类、instanceof关键字以及final关键字。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

多态的概念

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

总之,多态是面向对象编程中一个非常重要的概念,通过它可以实现统一的接口来操作不同的对象,提高代码的可读性和可维护性。在实际编程中,多态性的使用可以使代码更加灵活和扩展性更强。方法重写是实现多态的基础。
Java面向对象——多态、Object类、instanceof关键字以及final关键字,Java编程,方法,java,开发语言

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方法:文章来源地址https://www.toymoban.com/news/detail-660100.html

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

到了这里,关于Java面向对象——多态、Object类、instanceof关键字以及final关键字的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Java 面向对象 03 就近原则和this关键字

    对于起名字需要见名知意,所以这个String n 不太合适: 但是如果将n改为name,会与第五行代码的name重复: 运行代码发现,获取后的姓名为默认值,是null 引入就近原则: 此处打印的是age=10,但是如果想使用成员位置的age ,应该使用this 代码: 运行结果: 使用this关键

    2024年01月21日
    浏览(49)
  • 面向对象编程(进阶)1:关键字:this

    目录 1.1 this是什么? 1.2 什么时候使用this 1.2.1 实例方法或构造器中使用当前对象的成员 举例1: 举例2: 测试类: 1.2.2 同一个类中构造器互相调用 注意: 1.3 练习 **练习1:** 练习2: 在Java中,this不算难理解,它的作用和其词义很接近。 它在方法(准确的说是实例方法

    2023年04月13日
    浏览(46)
  • 面向对象编程:深入理解抽象类和关键字

    在Java编程中,我们经常会遇到一些特殊的和概念,其中包括static、final以及抽象类等。本文将深入探讨这些和概念的作用和使用方法,并通过一个实例展示抽象类的应用。 1. 1.1 static static修饰成员变量:表示该成员变量属于类,不属于对象,所有对象共享

    2024年02月15日
    浏览(53)
  • 面向对象(八)-- static 与 final 关键字 的使用

    目录 1.  static 1.1  static 的概述 1.2  static 修饰的特点 1.3  static 使用时的注意事项:

    2023年04月25日
    浏览(53)
  • 【C++干货基地】面向对象核心概念 const成员函数 | 初始化列表 | explicit关键字 | 取地址重载

    🎬 鸽芷咕 :个人主页  🔥 个人专栏 : 《C++干货基地》《粉丝福利》 ⛺️生活的理想,就是为了理想的生活!   哈喽各位铁汁们好啊,我是博主鸽芷咕《C++干货基地》是由我的襄阳家乡零食基地有感而发,不知道各位的城市有没有这种实惠又全面的零食基地呢?C++ 本身作

    2024年04月23日
    浏览(48)
  • Java面向对象多态

    目录 多态概述 Java 多态包括以下三种方式 方法重写(Override) 向上转型(Upcasting) 实现多态 Java 多态是指同一种类型的对象,在不同的情况下有着不同的状态和行为。它是基于继承、重写和向上转型等特性实现的,多态是面向对象编程的三大特征之一,其他两个分别是封装

    2023年04月13日
    浏览(48)
  • 【java】面向对象三大特性之多态

            俗话说的好,“一龙生九子,九子各不同”,这句话就蕴含了面向对象三大特性之一的多态的思想。那么多态具体有什么特点呢,就由博主来带大家梳理一下吧🤔 目录 一、什么是多态 二、重写 三、向上转型和向下转型 1、向上转型 2、向下转型 四、多态的优缺点

    2024年03月15日
    浏览(76)
  • Java面向对象 - 封装、继承和多态

    目录 第1关:什么是封装,如何使用封装 第2关:什么是继承,怎样使用继承 第3关:super的使用 第4关:方法的重写与重载 第5关:抽象类 第6关:final的理解与使用 第7关:接口 第8关:什么是多态,怎么使用多态 Java_Educoder

    2024年02月07日
    浏览(79)
  • Java 对象创建流程、this 关键字

    2024年02月12日
    浏览(48)
  • 14.Java面向对象----Object类

    Java中Object 类是所有类的父类,也就是说 Java 的所有类都继承了 Object,子类可以使用 Object 的所有方法。 Object 类位于 java.lang 包中,编译时会自动导入,我们创建一个类时,如果没有明确继承一个父类,那么它就会自动继承 Object,成为 Object 的子类。 返回该对象的字符串表示

    2023年04月21日
    浏览(34)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包