首页 > 编程语言 >Java--继承

Java--继承

时间:2024-08-14 10:39:14浏览次数:10  
标签:Java name Person -- Object 继承 对象 public

目录

概念

由于封装,使得有共同特征的一类事物的所有描述信息都被归于一类之中,但我们知道,这并不是万能的,有些事物有共性,但还存在区别,比如码农,简单封装起来如下:

优缺点

优点:1、提高代码的维护性(只需要改动父类)。2、提高代码的复用性(共性的成员抽取到父类中,子类可以直接继承使用)。

缺点:类和类之间的关系太紧密了。(耦合性增强)

object类

在Java中,Object 类是所有类的超类(或称为根类)。这意呀着,在Java中,你创建的任何类都隐式地继承自 Object 类,除非你的类显式地继承自另一个类。Object 类提供了所有Java对象共享的一组方法。这些方法主要包括:

  1. equals(Object obj):比较当前对象与指定对象是否相等。默认情况下,这比较的是对象的内存地址(即是否为同一个对象)。但是,很多类都会重写这个方法以提供更有意义的相等性判断

    public class Person {  
        // 假设Person类有name属性  
      
        @Override  
        public boolean equals(Object obj) {  
            if (this == obj) return true;  
            if (obj == null || getClass() != obj.getClass()) return false;  
            Person person = (Person) obj;  
            return Objects.equals(name, person.name);  
        }  
      
        // 假设有getter和构造函数  
      
        public static void main(String[] args) {  
            Person p1 = new Person("John Doe");  
            Person p2 = new Person("John Doe");  
            System.out.println(p1.equals(p2)); // 输出 true,如果name相同  
        }  
    }
    
  2. hashCode():返回对象的哈希码值。这个值用于支持哈希表,如 HashMap 中的键和 HashSet 中的元素。如果两个对象通过 equals(Object obj) 方法比较是相等的,那么它们的哈希码也必须相同

    @Override  
    public int hashCode() {  
        return Objects.hash(name);  
    }
    
  3. toString():返回对象的字符串表示。对于大多数对象,这仅仅是类的名称后跟哈希码的无符号十六进制表示,但对于很多类来说,toString() 方法会被重写以返回更有意义的描述性字符串

    public class Person {  
        private String name;  
      
        public Person(String name) {  
            this.name = name;  
        }  
      
        @Override  
        public String toString() {  
            return "Person{" +  
                    "name='" + name + '\'' +  
                    '}';  
        }  
      
        public static void main(String[] args) {  
            Person p = new Person("John Doe");  
            System.out.println(p); // 输出 Person{name='John Doe'}  
        }  
    }
    
  4. clone():创建并返回对象的副本。需要注意的是,默认情况下,clone() 方法是受保护的,且并不适用于所有对象;只有实现了 Cloneable 接口的类的实例才能被克隆

    public class Person implements Cloneable {  
        // 假设Person类有name属性  
      
        @Override  
        protected Object clone() throws CloneNotSupportedException {  
            return super.clone();  
        }  
      
        // 假设有getter和构造函数  
      
        public static void main(String[] args) throws CloneNotSupportedException {  
            Person p1 = new Person("John Doe");  
            Person p2 = (Person) p1.clone();  
            System.out.println(p1 == p2); // 输出 false,因为是不同的对象  
        }  
    }
    
  5. finalize():当垃圾回收器确定不存在对该对象的更多引用时,由对象的垃圾回收器调用此方法。但是,自Java 9起,finalize() 方法已被标记为过时(deprecated),并且在未来的版本中可能会被移除。这主要是因为 finalize() 方法的使用常常导致难以预料的问题,而且更好的做法是使用显式的管理资源或清理资源的机制,如 try-with-resources 语句和 java.lang.ref.Cleaner

    @Override  
    protected void finalize() throws Throwable {  
        super.finalize();  
        // 清理代码  
    }
    
  6. getClass():返回表示对象运行时类的 Class 对象。

  7. notify()notifyAll()wait():这些方法是Java线程同步机制的一部分,用于线程间的通信。它们必须与同步语句(如 synchronized 方法或同步块)一起使用,因为它们涉及到锁定对象并管理对象的等待集合。

尽管 Object 类提供了一些基础的功能,但通常,当我们编写Java程序时,会基于具体的业务需求去继承更具体的类或者实现接口,同时重写 Object 类中的某些方法(特别是 equals(Object obj)hashCode()),以满足我们的特定需求

示例

标签:Java,name,Person,--,Object,继承,对象,public
From: https://www.cnblogs.com/yangcurry/p/18358394

相关文章

  • ComfyUI的安装和基础使用
    简介最近了解了一下AI画图,是通过ComfyUI工具入门的,这里记录一下该工具的安装和基本使用流程。本文的内容将涵盖:ComfyUI的安装ComfyUI的基本使用LoRA模型的使用一些插件推荐一些教程推荐硬件条件:一台通过AutoDL私有云访问的Linux服务器,单卡RTX4090,显存24G......
  • Civitai模型的一个下载技巧
    简介Civitai网站本身是无法直连的,但是Civitai的下载API用的是Cloudflare的服务,是可以直连的。因此,只要能够获取模型的下载链接,就可以在任意环境中直连下载模型了。操作流程本文以https://civitai.com/models/639120这个模型为例,说明操作流程。本文假设读者使用的是Ch......
  • 【医疗器械质量管理体系GB/T42061-2022法规内容了解】
    国标GB/T42061等同于国际标准ISO13485(GB/T42061-2022 idt ISO13485:2016)4.1 组织要求  4.2文件要求  5、管理职责  6、资源管理  7、产品实现  8、测量,分析与改进 ......
  • .NET 8 中利用 MediatR 实现高效消息传递
    前言MediatR是.NET下的一个实现消息传递的库,轻量级、简洁高效,用于实现进程内的消息传递机制。它基于中介者设计模式,支持请求/响应、命令、查询、通知和事件等多种消息传递模式。通过泛型支持,MediatR可以智能地调度不同类型的消息,非常适合用于领域事件处理。在本文中,将通过一......
  • nginx 配置
    Nginxvue项目配置好后,刷新页面会出现404?方案:增加重定向try_files$uri$uri//index.html;mac配置Nginx1、brewinstallnginx安装nginx2、brewinfonginx查询nginx信息 3、查看/修改nginx的配置文件:打开文件/opt/homebrew/etc/nginx/,可以看到有nginx.conf文件,在该......
  • 3152. 特殊数组 II
    3152.特殊数组II题目链接:3152.特殊数组II代码如下:classSolution{public:vector<bool>isArraySpecial(vector<int>&nums,vector<vector<int>>&queries){vector<int>d(nums.size());//std::iota(numbers.......
  • ruoyi框架定时任务教程
    需求背景有时候我们需要动态管理一些定时任务,比如用户自己创建一个任务,在每天的早上9点执行。那我们就不能自己在配置文件中写死cron表达式,应该是一个动态的。ruoyi框架自带了定时任务模块,我们可以快速改造。题外话这里我们只讲定时任务这个功能,简单的两三个任务在这里执行......
  • HTML静态网页成品作业(HTML+CSS)——古诗词网设计制作(5个页面)
    ......
  • 数据分析 Numpy+Scipy+Matplotlib+Pandas
    数据分析Numpy+Scipy+Matplotlib+Pandas基础数值算法科学计算数据可视化序列高级函数一、numpy是什么?1.NumericalPython,数值的Python,补充了Python语言所欠缺的数值计算能力。2.Numpy是其它数据分析及机器学习库的底层库。3.Numpy完全标准C语言实现,运行效率充分优化。......
  • 收放卷计算公式(FB封装)控制V90伺服
       收卷机是印刷、包装、纺织等行业中常见的设备,用于将卷状材料(如纸张、布料等)卷取或展开。在生产过程中,收卷机的控制系统起着至关重要的作用,可以实现对收卷机速度、张力、卷径等参数的精确控制,保证卷取或展开材料的质量和效率。现对其算法进行分析讲解。放卷计算(封装FB......