Java中特殊的类——Object类
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类的更多相关文章
- Java中interface是否继承Object类
首先我们从C++说起, c++可以多继承.也就是一个类型 --- class,可以继承自2个以上的父类型.多继承导致一个问题,很多人知道.例如,如果类型B,类型C均继承自类型A.然后类型D继承自类型B ...
- Java中是否可以调用一个类中的main方法?
前几天面试的时候,被问到在Java中是否可以调用一个类中的main方法?回来测试了下,答案是可以!代码如下: main1中调用main2的主方法 package org.fiu.test; impor ...
- java中常用的包、类、以及包中常用的类、方法、属性----sql和text\swing
java中常用的包.类.以及包中常用的类.方法.属性 常用的包 java.io.*; java.util.*; java.lang.*; java.sql.*; java.text.*; java.a ...
- JAVA中的集合容器操作类
目录 JAVA中的集合容器操作类 List集合 ArrayList的操作方法说明 LinkedList Stack Set Map Queue 总结 JAVA中的集合容器操作类 Java容器类库总共分 ...
- Java中的集合和常用类
Java中的常用类: ▪ Object类 ▪ Math类 ▪ String类和StringBuffer类(字符串) ▪ 8种基本类型所对应的包装类 ▪ java.util包中的类——Date类 Obj ...
- Java温故而知新(7)Object类及其方法讲解
一.java.lang.Object java.lang包在使用的时候无需显示导入,编译时由编译器自动导入. Object类是类层次结构的根,Java中所有的类从根本上都继承自这个类. Object类 ...
- Java的常用类——Object类、String类
Java的JDK中提供给我们很多封装好的类就是Java API,可以直接调用. Java 的API(API: Application(应用) Programming(程序) Interface(接口) ...
- Java中必须了解的常用类
1.Java的包装类 基本数据类型我们都很熟悉,例如:int.float.double.boolean.char等,基本数据类型不具备对象的特征,不能调用方法,一般能实现的功能比较简单,为了让基本数据 ...
- Java中使用 Long 表示枚举类
Java中使用 Long 表示枚举类 在日常的开发过程中,很多时候我们需要枚举类(enum)来表示对象的各种状态,并且每个状态往往会关联到指定的数字,如: private enum Color { R ...
随机推荐
- easypoi导出动态表头excel
easypoi导出动态表头excel 1: springBoot项目maven依赖: <dependency> <groupId>cn.afterturn</groupI ...
- 自动下载MarkDown格式会议论文的程序
近期师兄发给我一个压缩包让我整理文献,而我发现压缩包里的内容是这样: 这样: 和这样的: 我大概看了一下,可能有270多篇文章是这种格式,俗话说的好,没有困难的工作,只有勇敢的研究僧.所以决定用Pyt ...
- [bzoj5511]大中锋的游乐场
记可乐为1,汉堡为-1,即求过程中绝对值不超过k的最短路. 然后发现k的范围仅为10,也就是说过程中合法的值仅有21种,因此跑一遍dij或spfa(嘿嘿嘿)即可. 1 #include<bits ...
- [bzoj5417]你的名字
先考虑l=1,r=|s|的部分分,需要求出t每一个前缀的不是s子串的最长后缀,记作pp[k],有以下限制:1.pp[pos[k]]<len(pos[k]表示k的某一个结束位置),因为不能被匹配 ...
- [atARC077F]SS
(以下字符串下标从0开始,并定义$2s=s+s$) 考虑$f(S)$,即令$l=\max_{2i<|S|且S[0,i)=S[|S|-i,|S|)]}i$,则$f(S)=S+S[l,|S|-l)$ ...
- 【JVM源码解析】模板解释器解释执行Java字节码指令(上)
本文由HeapDump性能社区首席讲师鸠摩(马智)授权整理发布 第17章-x86-64寄存器 不同的CPU都能够解释的机器语言的体系称为指令集架构(ISA,Instruction Set Archit ...
- layui某个字段不让页面显示显示
<script src="/layuiadmin/layui/layui.js"></script> <script> layui.config ...
- 一个Java发送邮件的案例
经常有些要发送邮件的需求,但是去网上拷代码老是拷不到能直接运行的,还经常要去以前的项目里面拷,今天直接发出来算了,免得每次都要去别的项目拷. (只支持发送简单的文本文件,发附件的稍微复杂一丢丢,这里就 ...
- Codeforces 809C - Find a car(找性质)
Codeforces 题目传送门 & 洛谷题目传送门 首先拿到这类题第一步肯定要分析题目给出的矩阵有什么性质.稍微打个表即可发现题目要求的矩形是一个分形.形式化地说,该矩形可以通过以下方式生成 ...
- Codeforces 1413F - Roads and Ramen(树的直径+找性质)
Codeforces 题目传送门 & 洛谷题目传送门 其实是一道还算一般的题罢--大概是最近刷长链剖分,被某道长链剖分与直径结合的题爆踩之后就点开了这题. 本题的难点就在于看出一个性质:最长路 ...