Java中特殊的类——Object类

1.Object类的概述

Object类是java默认提供的类。Java中除了Object类,所有的类都是有继承关系的。默认会继承Object类,即所有的对象都可以用Object进行接收

Object类位于java.lang包中,该包中包含着Java最基础和核心的类,在编译时会自动导入。

class Per{}

class Studnet{}

public class TestObject4_14 {

public static void main(String[] args) {

//Object接收所有类的对象

fun(new Per());

fun(new Studnet());

}

public static void fun(Object obj){

System.out.println(obj);

}

}

2.Object类中的重要方法

Object类是参数的最高统一类型,所以也提供有一些方法。

(1)获得对象信息 public String toString()

class Per{

private String name;

private int age;

public Per(String name, int age) {

super();

this.name = name;

this.age = age;

}

}

public class TestObject4_14 {

public static void main(String[] args) {

//Object接收所有类的对象

fun(new Per("lemon",20));

fun("hello");

}

public static void fun(Object obj){

//Object中默认输出对象调用的就是toString方法

System.out.println(obj.toString());

}

}

class Per{

private String name;

private int age;

public Per(String name, int age) {

super();

this.name = name;

this.age = age;

}

//对toString方法的覆写

public String toString() {

return this.name+" "+this.age;

}

}

public class TestObject4_14 {

public static void main(String[] args) {

//Object接收所有类的对象

fun(new Per("lemon",20));

fun("hello");

}

public static void fun(Object obj){

//Object中默认输出对象调用的就是toString方法

System.out.println(obj.toString());

}

}

对于上面的结果,我们不禁会产生疑问:为什么对于字符串中就可以直接输出,而对于对象则输出的一串HashCode?

toString()的核心目的在于取得对象信息。

String作为信息输出的重要数据类型,在java中所有数据类型只要遇到String并且执行了“+”操作,那么都要求先将其变为字符串后再连接,而所有的对象要想变成字符串默认采用toString()方法。

(2)对象比较public boolean equals(Object obj)

所有的类均可以按照自己的需要对equals方法进行覆写,即这个方法可用来比较两个对象是否“相等”,至于什么才叫“相等”,各个类可以根据自己的情况与需要自行定义。如String,就是要求两个对象所代表的字符串值相等,而对于一个自定义的Per类,则可能是要求姓名、年龄等一样才算是“相等”。

尽管不同的类有不同的规则,但都遵循同一条规则,即如果两个对象是“一样”的,那么它们必然是“相等”(equals)的。那么我们又将什么视为是一样的呢:即a和b指向同一个对象。Object类中的equals方法实施的就是这一条比较原则,对任意非空的指引值a和b,当且仅当a和b指向同一个对象时才返回true。

class Per{

private String name;

private int age;

public Per(String name, int age) {

super();

this.name = name;

this.age = age;

}

//对equals方法的覆写

public boolean equals(Object obj) {

if(obj == null){

return false;

}

if(this == obj){

return true;

}

//obj不是Per的实例化对象

if(!(obj instanceof Per)){

return false;

}

Per per = (Per)obj;//向下转型,比较属性值

return this.name.equals(per.name) && this.age == per.age;

}

}

public class TestObject4_14 {

public static void main(String[] args) {

//equals方法

Per per1 = new Per("lemon", 20);

Per per2 = new Per("lemon", 20);

Per per3 = new Per("lemon", 18);

System.out.println(per1.equals(per2));

System.out.println(per1.equals(per3));

}

}

 

3.Object接收引用数据类型

在之前我们可发现Object可接受任何的对象,因为Object是所有类的父类,但Object并不局限于接收所有数据类型,还包括:数组、类、接口。

//接口

interface IPerson{

//抽象方法

public void getInfo();

}

class Stu implements IPerson{

public String toString(){

return "我是一名学生";

}

public void getInfo() {

System.out.println("我的专业是数学");

}

}

//Object接收数组

public class TestObject4_14 {

public static void main(String[] args) {

//Object接收数组对象,向上转型

Object obj = new int[]{143,8,9,43};

//强制向下转型

int[] value = (int[])obj;

for(int i : value){

System.out.print(i + " ");

}

System.out.println();

//Object可以接收接口(强制要求),因为接口不能继承任何类

IPerson person = new Stu();//子类向父接口转型

Object obj1 = person;//接口向Object转型

System.out.println(obj1);

IPerson temp = (IPerson)obj1;//强制类型转换

temp.getInfo();

}

}

总结:

Object真正达到了参数的统一,如果希望接收所有的数据类型,就用Object了完成。

Java中特殊的类——Object类的更多相关文章

  1. Java中interface是否继承Object类

    首先我们从C++说起, c++可以多继承.也就是一个类型 --- class,可以继承自2个以上的父类型.多继承导致一个问题,很多人知道.例如,如果类型B,类型C均继承自类型A.然后类型D继承自类型B ...

  2. Java中是否可以调用一个类中的main方法?

    前几天面试的时候,被问到在Java中是否可以调用一个类中的main方法?回来测试了下,答案是可以!代码如下: main1中调用main2的主方法 package org.fiu.test; impor ...

  3. java中常用的包、类、以及包中常用的类、方法、属性----sql和text\swing

    java中常用的包.类.以及包中常用的类.方法.属性 常用的包 java.io.*; java.util.*; java.lang.*; java.sql.*; java.text.*; java.a ...

  4. JAVA中的集合容器操作类

    目录 JAVA中的集合容器操作类 List集合 ArrayList的操作方法说明 LinkedList Stack Set Map Queue 总结 JAVA中的集合容器操作类 Java容器类库总共分 ...

  5. Java中的集合和常用类

    Java中的常用类: ▪ Object类 ▪ Math类 ▪ String类和StringBuffer类(字符串) ▪ 8种基本类型所对应的包装类 ▪ java.util包中的类——Date类 Obj ...

  6. Java温故而知新(7)Object类及其方法讲解

    一.java.lang.Object java.lang包在使用的时候无需显示导入,编译时由编译器自动导入. Object类是类层次结构的根,Java中所有的类从根本上都继承自这个类. Object类 ...

  7. Java的常用类——Object类、String类

    Java的JDK中提供给我们很多封装好的类就是Java API,可以直接调用. Java 的API(API: Application(应用) Programming(程序) Interface(接口) ...

  8. Java中必须了解的常用类

    1.Java的包装类 基本数据类型我们都很熟悉,例如:int.float.double.boolean.char等,基本数据类型不具备对象的特征,不能调用方法,一般能实现的功能比较简单,为了让基本数据 ...

  9. Java中使用 Long 表示枚举类

    Java中使用 Long 表示枚举类 在日常的开发过程中,很多时候我们需要枚举类(enum)来表示对象的各种状态,并且每个状态往往会关联到指定的数字,如: private enum Color { R ...

随机推荐

  1. VNC服务器的搭建(带图形化支持)

    环境:centos7.6最小化安装 图形化支持 如果希望安装简单的图形支持的话,仅包含gnome的最最最最基础的包的话可以使用以下命令 yum groups install "X Windo ...

  2. 『学了就忘』Linux基础命令 — 29、关机和重启

    目录 1.sync数据同步 2.shutdown命令 3.reboot命令 4.halt和poweroff命令 5.init命令 1.sync数据同步 sync命令的基本信息如下: 命令名称:sync ...

  3. 什么是 Webhook?

    1. 什么是 Webhook? Webhook 是一个 API 概念,是微服务 API 的使用范式之一,也被成为反向 API,即前端不主动发送请求,完全由后端推送:举个常用例子,比如你的好友发了一条朋 ...

  4. ELK集群之filebeat(6)

    filebeat工作原理 ilebeat是本地文件的日志数据采集器. 作为服务器上的代理安装,Filebeat监视日志目录或特定日志文件,tail file,并将它们转发给Elasticsearch或 ...

  5. C++ 内存四区 理解总结

    内存模型图(4G) 整体简单说明 32位CPU可寻址4G线性空间,每个进程都有各自独立的4G逻辑地址,其中 03G是用户空间**,**34G是内核空间即3G用户空间和1G内核空间,不同进程相同的逻辑地 ...

  6. 4. 理解Update、Enter、Exit 与 添加、删除元素

    理解Update.Enter.Exit 与 添加.删除元素 在使用data()绑定数据时,例如:现在我们有一个数组[3,6,9,12,15],我们可以将数组每一项与一个<p>绑定,但是,现 ...

  7. 求求你们了,别再写满屏的 if/ else 了!

    为什么我们写的代码都是 if-else? 程序员想必都经历过这样的场景:刚开始自己写的代码很简洁,逻辑清晰,函数精简,没有一个 if-else,可随着代码逻辑不断完善和业务的瞬息万变:比如需要对入参进 ...

  8. 高德地图API中折线polyline不能跨越180度经度线的解决方案

    1.问题 最近在使用高德地图的API,有一个需求是画出对象的历史轨迹,采用了高德地图API中的折线polyline函数.但如果需要跨180度经度线的折线,会出现不能跨越的情况,如下图所示: 图中有三个 ...

  9. Typora图片自动上传至码云

    Typora图片自动上传至码云 下载PicGo图片上传工具 PicGo下载地址 下载完毕后打开PicGo,点击插件设置,搜索Gitee,点击安装gitee 2.0.3 码云仓库创建 创建参数是点击设置 ...

  10. 这一次,Google 终于对 Web 自动化下手了!

    大家好,我是安果! 最近 Google 对 Chrome 进行了一次比较大的更新,其中一项是脚本录制回放功能,它可以非常方便我们处理一些自动化场景 我们可以在 Chrome 官网下载 Chrome C ...