今天了解的是:Object 类
在java中,所有的类都有一个公共的父类Object,一个类,只要没有明显地继承一个类,则肯定是Object类的子类。
这两行代码表示的含义都是一样的:
class Person extends Object{} class Person{}
1、toString()方法
先看下面这段代码
class Demo{} //定义Demo类,实际上它继承了Object类 public class ObjectDemo { public static void main(String[] args){ Demo d = new Demo();//实例化Demo对象 System.out.println("不加toString()输出:" + d); System.out.println("加toString()输出:" + d.toString()); } }
运行结果:
不加toString()输出:object.Demo@10b30a7
加toString()输出:object.Demo@10b30a7
以上程序是随机输出了一些地址信息,从程序的运行结果可以清楚的发现,加与不加toString(),最终输出的结果都是一样的,所以说,对象输出时一定会调用Object类中的toString()方法打印内容。所以利用此特性,就可以通过toString()取得对象的一些信息。
应用toString()方法取得对象内容:
class Person{ private String name; private int age; public Person(String name,int age){ //通过构造设置属性内容 this.name = name; this.age = age; } public String toString(){ //覆写toString()方法 return "姓名:" + this.name + ";年龄:" + this.age; } } public class ObjectDemo2 { public static void main(String[] args){ Person per = new Person("春哥",30);//实例化Person对象 System.out.println("对象信息:" + per); } }
程序运行结果:
对象信息:姓名:春哥;年龄:30
程序的Person类中覆写了Objdect类中的toString()方法,这样直接输出对象时调用的是被子类覆写过的toString()方法。
2、equals()
Object 类提供的equals()方法默认是比较地址的,并不能对内容进行比较。
对象的比较:
class Person{ private String name; private int age; public Person(String name,int age){ //通过构造设置属性内容 this.name = name; this.age = age; } public boolean equals(Object obj){ //如果两个对象的地址相等,则肯定是同一个对象 if(this == obj){ return true; } if(!(obj instanceof Person)){ // 判断进来的对象是否是Person的实例 return false; //如果不是,则直接返回false } Person per = (Person)obj; //将传进来的对象向下转型 if(per.name.equals(this.name) && per.age == this.age){ //逐个属性比较,看是否相等 return true; //对象内容相等 }else { return false; //对象内容不等 } } public String toString(){ //覆写toString()方法 return "姓名:" + this.name + ";年龄:" + this.age; } } public class ObjectDemo3 { public static void main(String[] args){ Person per1 = new Person("春哥",30); Person per2 = new Person("春哥",30); System.out.println(per1.equals(per2)?"是同一个人!":"不是同一个人!"); System.out.println(per1.equals("曾哥")?"是同一个人!":"不是同一个人!"); } }
运行结果:
是同一个人!
不是同一个人!
在Person类中覆写equals()方法,首先判断传递进来的对象与当前对象地址是否相等,如果相等,则肯定是同一个对象,因为在equals()方法处传递的参数是Object类型,所以任何对象都可以接收,这样在对象进行向下转型前就必须进行判断,判断传进来的对象是否是Person的实例,如果不是,则直接返回false;如果是,则将各属性依次进行判断。
3、接收任意引用类型的对象
既然Object类是所有对象的祖宗,则所有的对象都可以向Object进行转换,在这其中也包含了数组和接口类型,即一切的引用数据类型都可以使用Object进行接收。
使用Object接收接口实例
interface A{ //定义接口 String getInfo(); //定义抽象方法 } class B implements A{ //子类实现接口 public String getInfo(){ //覆写接口中的抽象方法 return "Hello World!!"; } } public class ObjectDemo4 { public static void main(String[] args){ A a = new B(); //为接口实例化 Object obj = a; //对象向上转型 A x = (A)obj; //对象向下转型 System.out.print(x.getInfo()); } }
运行结果:
Hello World!!
通过代码可以发现,虽然接口不能继承一个类,但是依然是Object类的子类,因为接口本身就是引用数据类型,所以可以进行向上转型操作。
相关推荐
Tcp服务端与客户端的JAVA实例源代码,一个简单的Java TCP服务器端程序,别外还有一个客户端的程序,两者互相配合可以开发出超多的网络程序,这是最基础的部分。 递归遍历矩阵 1个目标文件,简单! 多人聊天室 3...
Tcp服务端与客户端的JAVA实例源代码,一个简单的Java TCP服务器端程序,别外还有一个客户端的程序,两者互相配合可以开发出超多的网络程序,这是最基础的部分。 递归遍历矩阵 1个目标文件,简单! 多人聊天室 ...
(5) implements 子句用于说明类中将实现哪些接口,接口是 Java 的一种引用类 型。 (6) 类体包含了变量和方法。在类体中定义的数据、变量和方法称为类的成员, 或称为实例变量和实例方法。 (7) 例如: 下例定义...
4. **网络编程**:`java.net`包包含网络通信所需的基础类和接口,如`Socket`、`ServerSocket`,支持TCP/IP通信。 5. **多线程**:`java.lang.Thread`和`java.util.concurrent`包提供了多线程编程的支持,包括线程的...
Tcp服务端与客户端的JAVA实例源代码,一个简单的Java TCP服务器端程序,别外还有一个客户端的程序,两者互相配合可以开发出超多的网络程序,这是最基础的部分。 递归遍历矩阵 1个目标文件,简单! 多人聊天室 ...
日历表格面板 [ConfigLine.java] 控制条类 [RoundBox.java] 限定选择控件 [MonthMaker.java] 月份表算法类 [Pallet.java] 调色板,统一配色类 Java扫雷源码 Java生成自定义控件源代码 2个目标文件 Java实现HTTP连接...
Doss撰写,出版社为Wordware Publishing, Inc.,ISBN号为1556226543,出版日期为1998年12月1日。本书旨在介绍如何利用CORBA(Common Object Request Broker Architecture,通用对象请求代理系统)与Java技术进行...
日历表格面板 [ConfigLine.java] 控制条类 [RoundBox.java] 限定选择控件 [MonthMaker.java] 月份表算法类 [Pallet.java] 调色板,统一配色类 Java扫雷源码 Java生成自定义控件源代码 2个目标文件 Java实现HTTP连接...
第6章 Java的类(Class)和对象(Object) 132 教学视频:59分钟 6.1 驾驶汽车向类(Class)的世界进发 132 6.1.1 汽车带来的问题 132 6.1.1 类的组成 134 6.1.3 使用自定义的Car类 136 6.1.4 类和对象 139 ...
文档由Java语言的主要发明者和贡献者所著,包括James Gosling、Bill Joy、Guy Steele、Gilad Bracha和Alex Buckley等,其版本号为11,最终发布日期为2018年9月。 这份官方规范主要分为以下几个部分: 1. 绪论:...
第6章 Java的类(Class)和对象(Object) 132 教学视频:59分钟 6.1 驾驶汽车向类(Class)的世界进发 132 6.1.1 汽车带来的问题 132 6.1.1 类的组成 134 6.1.3 使用自定义的Car类 136 6.1.4 类和对象 139 ...
Java EE 5在2006年5月11日发布,它简化了基于Java EE的应用程序开发,增加了对注解的支持,并引入了Java Persistence API(JPA)。 Java SE 6(Mustang)发布于2006年12月11日,这一版本优化了性能、增强了脚本语言...
Java基础部分 7 1、一个".java"源文件中是否可以包括多个类(不是内部类)?有什么限制? 7 2、Java有没有goto? 7 3、说说&和&&的区别。 8 4、在JAVA中如何跳出当前的多重嵌套循环? 8 5、switch语句能否作用在byte...
日历表格面板 [ConfigLine.java] 控制条类 [RoundBox.java] 限定选择控件 [MonthMaker.java] 月份表算法类 [Pallet.java] 调色板,统一配色类 Java扫雷源码 Java生成自定义控件源代码 2个目标文件 Java实现HTTP连接...
Tcp服务端与客户端的JAVA实例源代码,一个简单的Java TCP服务器端程序,别外还有一个客户端的程序,两者互相配合可以开发出超多的网络程序,这是最基础的部分。 递归遍历矩阵 1个目标文件,简单! 多人聊天室 ...
**解析:** 在Java中,`Date`类中的`getMonth()`方法返回的是月份的0基序号(即0代表1月,1代表2月等)。`getDate()`方法返回的是该月的具体日期(如8)。 **答案:** 假设今天是9月8日,则输出 `"8 8"`。 #### 五、...
- **#5**:表示父类`java.lang.Object`的符号引用 - ... (其他常量省略) 3. **方法描述**: - **()**:构造方法,用于初始化对象。 - **main([Ljava/lang/String;)V**:主方法,是程序的入口点,它接受一个字符...
Java基础部分 7 1、一个".java"源文件中是否可以包括多个类(不是内部类)?有什么限制? 7 2、Java有没有goto? 7 3、说说&和&&的区别。 8 4、在JAVA中如何跳出当前的多重嵌套循环? 8 5、switch语句能否作用在byte...
Java操作Elasticsearch 5.x的Demo详解 在大数据时代,Elasticsearch作为一个高效、可扩展的全文搜索引擎,被广泛应用于日志分析、实时监控、数据挖掘等领域。本篇文章将详细解析如何使用Java API来操作Elastic...