Java--面向对象三大特征继承

概念

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

它允许一个类(称为子类或派生类)继承另一个类(称为父类或基类)的属性和方法

特点

java只支持单继承,不支持多继承,但支持多层继承。一个儿子不能有多个爸爸,但我的爸爸也有爸爸

优缺点

优点: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()),以满足我们的特定需求

posted @   curry库-04049  阅读(14)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 因为Apifox不支持离线,我果断选择了Apipost!
· 通过 API 将Deepseek响应流式内容输出到前端
点击右上角即可分享
微信分享提示