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. float32 和 float64

    float32 和 float64 Go语言中提供了两种精度的浮点数 float32 和 float64. float32,也即我们常说的单精度,存储占用4个字节,也即4*8=32位,其中1位用来符号 ...

  2. testNG 注解使用说明

    1.TestNG常用注解 @BeforeSuite 标记的方法:在某个测试套件(suite)开始之前运行 @BeforeTest 在某个测试(test)开始之前运行 @BeforeClass 在某个测 ...

  3. jQuery淡入淡出效果

    如果是通过鼠标点击事件来触发动画效果可以使用 $("#button").click(function(){ $("#div").stop().fadeToggl ...

  4. 使用silky脚手架构建微服务应用

    目录 模板简介 构建独立应用的模板Silky.App.Template 构建模块化应用的模板Silky.Module.Template 开源地址 在线文档 模板简介 使用 dotnet new 命令可 ...

  5. SpringCloud升级之路2020.0.x版-31. FeignClient 实现断路器以及线程隔离限流的思路

    本系列代码地址:https://github.com/JoJoTec/spring-cloud-parent 在前面一节,我们实现了 FeignClient 粘合 resilience4j 的 Ret ...

  6. Pytest使用pytest-html和allure生成测试报告

    Pytest-html 1.安装命令pip3 install pytest-html,如下图: 执⾏后,会在当前⽬录下⽣成 ⼀个report.html的⽂件,打开后会展示详细的测试报告,执行该命令py ...

  7. Part 23 to 26 Routing in Angular

    Part 23 AngularJS routing tutorial In general, as the application becomes complex you will have more ...

  8. Databend 社区积极拥抱 Rust 生态(202111回顾)

    Databend 旨在成为一个 开源.弹性.可靠 的无服务器数仓,查询快如闪电,与 弹性.简单.低成本 的云服务有机结合.数据云的构建,从未如此简单! Databend 对 Rust 社区的意义 Da ...

  9. Hadoop HA集群 与 开发环境部署

    每一次 Hadoop 生态的更新都是如此令人激动 像是 hadoop3x 精简了内核,spark3 在调用 R 语言的 UDF 方面,速度提升了 40 倍 所以该文章肯定得配备上最新的生态 hadoo ...

  10. CentOS 8.4安装Docker

    前言: Docker 是一个用于开发.传送和运行应用程序的开放平台.Docker 使您能够将应用程序与基础设施分开,以便您可以快速交付软件.使用 Docker,您可以像管理应用程序一样管理基础设施.通 ...