java之继承和Object类中的方法

继承 extends

java中一个类只能继承一个类,可以被多个类继承,只能继承public和protected类型,不能继承private类型

Objec 所有类的父类,所有类默认继承他

Object中的方法(面试重点)

1、equals() 这个方法用于比较两个对象是否相等。在Java中,默认的equals()方法比较的是对象的引用,也就是说,如果两个对象在内存中指向同一个地址,那么它们就被认为是相等的。如果你想比较两个对象的内容是否相等,你需要在你的类中重写equals()方法。注意,在String类中,equals()方法比较的是字符串的内容,而不是引用。

2、getClass() 获取类信息,这个方法用于获取对象的类信息。所有的Java对象都继承自Object类,getClass()方法是Object类的一个方法。当你调用一个对象的getClass()方法时,你得到的是该对象的运行时类(即实际的类)。例如,如果你有一个String对象并调用getClass()方法,你将得到java.lang.String。

3、hasCode() 根据每个对象的地址计算出来,不同对象的散列码有极小的概率重复(散列:局部没有规律,整体均匀)。这个方法用于获取对象的哈希码。哈希码通常用于数据结构(如哈希表),通过哈希码可以快速定位对象在内存中的位置。Java要求如果你重写equals()方法,你也需要重写hashCode()方法。这是因为Java的HashMap和HashSet等数据结构需要同时使用equals()和hashCode()方法来正确地存储和检索对象。两个对象散列码不一样,这两个对象一定是不同的对象,对象不一样,散列码有极小可能一样

equals()和hashCode()方法在hashMap中是如何配合的?

在Java中,HashMap是一种基于哈希表实现的键值对映射的数据结构。在这个结构中,每个键值对(Key-Value Pair)都是一个独立的单元,其中键(Key)用于标识特定的值(Value)。为了能够高效地存储和检索这些键值对,HashMap使用了哈希函数(Hash Function)来计算每个键的哈希码(Hash Code),并用这个哈希码来决定键值对的存储位置。

equals()和hashCode()两个方法在这个过程中起着至关重要的作用。

  1. equals():这个方法用于比较两个对象是否相等。在HashMap中,它被用来判断两个键是否相等。当我们要在HashMap中插入一个新的键值对时,会首先调用键的equals()方法来检查这个键是否已经存在于哈希表中。如果键已经存在,新的键值对就不会被插入到哈希表中。
  2. hashCode():这个方法用于计算对象的哈希码,这个哈希码被用来确定对象在哈希表中的存储位置。在HashMap中,每个键值对都会根据键的哈希码被分配到一个特定的桶(Bucket)中。当我们要根据一个键来查找特定的值时,会首先调用键的hashCode()方法来找到对应的桶,然后在该桶中查找具体的键值对。

这两个方法通常需要一起使用,因为如果两个对象相等(即它们的equals()方法返回true),那么它们的hashCode()方法应该返回相同的值。这是因为如果两个对象相等,它们应该在同一个桶中,以便能够正确地被找到和检索。反之,如果两个对象的hashCode()相同,这并不意味着它们的equals()方法也返回true,因为不同的对象可能会被映射到同一个桶中。

总的来说,equals()和hashCode()在HashMap中的配合使得我们能够高效地存储和检索键值对。通过使用这两个方法,我们可以根据键快速地找到特定的值,而不需要遍历整个数据结构。

String s1="OK";

String s2 = new String("OK");

StringBuilder s3 = new StringBuilder (s1) ;

s1和s2的散列码相同,因为String中重写了equals方法,比较大时字符串的内容;s1与s3的散列码不同,因为StringBuilder类中没有hashCode方法,其散列码由Object默认的hashCode()方法导出的是对象的地址。

4、notify() 这个方法用于唤醒在此对象监视器上等待的所有线程。如果有多个线程在等待,则所有线程都会被唤醒。例如,假设你有一个共享资源,当资源可用时,你可能会调用notifyAll()方法来唤醒所有正在等待的线程。

5、notifyAll() 这个方法用于唤醒在此对象监视器上等待的所有线程。如果有多个线程在等待,则所有线程都会被唤醒。例如,假设你有一个共享资源,当资源可用时,你可能会调用notifyAll()方法来唤醒所有正在等待的线程。

6、wait() 这个方法使当前线程等待直到另一个线程调用该对象的notify()方法或notifyAll()方法。这个方法通常在多线程编程中使用,当你需要让当前线程等待某个条件满足时(例如,当一个资源变得可用时),你可能会调用wait()方法

7、toString() 这个方法返回对象的字符串表示形式。在Java的Object类中,toString()方法返回的是对象的类名和对象的哈希码的字符串表示形式。在很多类中(如String类),toString()方法返回的是对象的实际内容。例如,对于字符串"hello",toString()方法将返回"hello"。

在Java中,多态(Polymorphism)是指一个接口或类具有多种形态。它是一种面向对象编程的特性,可以使得代码更加灵活、可扩展,并且更容易维护。

Java中的多态性主要通过以下几种方式实现:

  1. 接口多态:通过实现多个接口,一个类可以具有多种形态。例如,一个类可以实现一个接口,同时也可以实现另一个接口,从而具有不同的行为和功能。
  2. 继承多态:通过继承,一个子类可以继承父类的属性和方法,同时也可以有自己的属性和方法。这样,子类就可以具有不同于父类的形态。
  3. 类型转换多态:通过类型转换,可以将一个对象转换为不同的类型,从而使其具有不同的形态。例如,可以将一个父类对象转换为子类对象,从而调用子类的方法和属性。

Object类只能被泛型强制转换

new一个子类时,会自动生成所有父类

调用父类方法用super,调用自己方法用this

非静态方法只能依托对象进行调用,静态方法可以直接调用

抽象类 abstract,继承抽象类就必须实现里面的抽象方法,提取共性,不能new抽象类

你可能感兴趣的:(java,开发语言)