详解Object类和抽象类下

简介: 详解Object类和抽象类下

一、抽象类总结

1.抽象类中必须使用abstract修饰类
2.抽象类中可以包含普通类所能包含的成员
3.抽象类和普通类不一样的是:抽象类可以包含抽象方法.
4.抽象方法使用abstract修饰的,这个方法没有具体的实现
5.不能实例化抽象类
6.抽象类最大的意义就是被继承
7.如果一个普通类继承了一个抽象类,那么必须重写抽象类当中的方法,否则写为抽象类
8.抽象方法不能是私有的,static?也就是要满足重写的规则
9.final?不可以它和abstract是矛盾的
10.抽象类当中可以有构造方法,为了方便子类调用,来初始化类中的成员变量.
11.抽象类的出现,是为了让程序员更早的发现错误,防止出错,让编译器及时提醒我们.

二、Object类

4.1 初始Object

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

class Person {
    
}
class Person extends Object {
    
}

这两种是一模一样的.
在这里插入图片描述

4.2 toString

Object中的toString方法
在这里插入图片描述

public static void main(String[] args) {
        Circle circle = new Circle(2);
        System.out.println(circle);
    }

在这里插入图片描述
我们要打印circle对象具体内容的话,需要重写toString方法.

public String toString() {
        return "Circle{" +
                "r=" + r +
                '}';
    }

在这里插入图片描述

4.3 equals

在Java中,进行比较时:
a.如果双等号左右两侧是基本类型变量,比较的是变量中值是否相同
b.如果双等号左右两侧是引用类型变量,比较的是引用变量地址是否相同
c.如果要比较对象中内容,必须重写Object中的equals方法,因为equals方法默认也是按照地址比较的:

public static void main(String[] args) {
        Circle circle = new Circle(2);
        Circle circle1 = new Circle(2);
        int a = 1;
        int b = 1;
        System.out.println(a == b);
        System.out.println(circle == circle1);
        System.out.println(circle.equals(circle1));
    }

在这里插入图片描述
每次new一个对象都会在堆开辟一个新的空间.
在这里插入图片描述
Object定义的equals方法,在两个对象调用时对比的是两个对象地址是否相等,而不是具体对象中的内容这时候我们需要重写equals方法.

 @Override
    public boolean equals(Object obj) {
        if(obj == null) {
            return false;
        }
        if(this == obj) {
            return true;
        }
        if(!(obj instanceof Circle)) {
            return false;
        }
        Circle circle = (Circle)obj;
        return this.r == circle.r;
    }

在这里插入图片描述
比较对象中内容是否相同的时候,一定要重写equals方法。

4.4 hashcode

在这里插入图片描述
我们可以发现toString方法中有使用到这个方法,我们目前只需要知道它是一个内存地址,然后调用Integer.toHexString()方法,将这个地址以16进制输出。

public static void main(String[] args) {
        Circle circle1 = new Circle(2);
        Circle circle2 = new Circle(2);
        System.out.println(circle1.hashCode());
        System.out.println(circle2.hashCode());
    }

在这里插入图片描述
我们认为两个存储相同值的Circle对象,在调用Object的hashcode方法时,输出的值不一样.

//重写hashCode方法
@Override
    public int hashCode() {
        return Objects.hash(r);
    }

在这里插入图片描述
当我们重写hashCode后,当两个对象存储的内容一样时,输出的哈希值是一样的.
结论:
1、hashcode方法用来确定对象在内存中存储的位置是否相同
2、事实上hashCode() 在散列表中才有用,在其它情况下没用。在散列表中hashCode() 的作用是获取对象的散列码,进而确定该对象在散列表中的位置。

目录
相关文章
|
1月前
|
Java
【Java基础面试二十】、介绍一下Object类中的方法
这篇文章介绍了Java中Object类的常用方法,包括`getClass()`、`equals()`、`hashCode()`、`toString()`、`wait()`、`notify()`、`notifyAll()`和`clone()`,并提到了不推荐使用的`finalize()`方法。
【Java基础面试二十】、介绍一下Object类中的方法
|
1月前
|
前端开发 Java 编译器
【前端学java】java中的Object类和前端中的Object有什么区别(9)
【8月更文挑战第10天】java中的Object类和前端中的Object有什么区别
31 0
【前端学java】java中的Object类和前端中的Object有什么区别(9)
|
1月前
|
算法 Java
12 Java常用类(一)(内部类+object类+包装类)
12 Java常用类(一)(内部类+object类+包装类)
28 5
|
2月前
|
Java
Java中的Object类 ( 详解toString方法 | equals方法 )
Java中的Object类 ( 详解toString方法 | equals方法 )
|
3月前
|
Java
【Java】Object类简单解析
【Java】Object类简单解析
38 1
|
3月前
|
前端开发 JavaScript Java
Java基础10-深入理解Class类和Object类(二)
Java基础10-深入理解Class类和Object类(二)
38 5
|
3月前
|
Java C++
Java基础10-深入理解Class类和Object类(一)
Java基础10-深入理解Class类和Object类(一)
45 4
|
3月前
|
Java API
JavaSE——常用API进阶一(1/3)-Object类(Object类的作用、Object类的常见方法-toString方法、equal方法、clone方法)
JavaSE——常用API进阶一(1/3)-Object类(Object类的作用、Object类的常见方法-toString方法、equal方法、clone方法)
27 0
|
3月前
|
Java 编译器 数据处理
JavaSE——面相对象高级一(4/4)-继承相关的注意事项:权限修饰符、单继承、Object类、方法重写、子类访问成员的特点......
JavaSE——面相对象高级一(4/4)-继承相关的注意事项:权限修饰符、单继承、Object类、方法重写、子类访问成员的特点......
43 0
|
4月前
|
算法 Java 测试技术
简介Object类+接口实例(深浅拷贝、对象数组排序)
简介Object类+接口实例(深浅拷贝、对象数组排序)