`
songzhan
  • 浏览: 247825 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论

5月2号 -- java基础(四)Object类

阅读更多

今天了解的是: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类的子类,因为接口本身就是引用数据类型,所以可以进行向上转型操作。

分享到:
评论

相关推荐

    java源码包---java 源码 大量 实例

     Tcp服务端与客户端的JAVA实例源代码,一个简单的Java TCP服务器端程序,别外还有一个客户端的程序,两者互相配合可以开发出超多的网络程序,这是最基础的部分。 递归遍历矩阵 1个目标文件,简单! 多人聊天室 3...

    java源码包2

     Tcp服务端与客户端的JAVA实例源代码,一个简单的Java TCP服务器端程序,别外还有一个客户端的程序,两者互相配合可以开发出超多的网络程序,这是最基础的部分。 递归遍历矩阵 1个目标文件,简单! 多人聊天室 ...

    Java 语言基础 —— 非常符合中国人习惯的Java基础教程手册

    (5) implements 子句用于说明类中将实现哪些接口,接口是 Java 的一种引用类 型。 (6) 类体包含了变量和方法。在类体中定义的数据、变量和方法称为类的成员, 或称为实例变量和实例方法。 (7) 例如: 下例定义...

    JDK17-java-core-libraries-developer-guide.pdf

    4. **网络编程**:`java.net`包包含网络通信所需的基础类和接口,如`Socket`、`ServerSocket`,支持TCP/IP通信。 5. **多线程**:`java.lang.Thread`和`java.util.concurrent`包提供了多线程编程的支持,包括线程的...

    java源码包3

     Tcp服务端与客户端的JAVA实例源代码,一个简单的Java TCP服务器端程序,别外还有一个客户端的程序,两者互相配合可以开发出超多的网络程序,这是最基础的部分。 递归遍历矩阵 1个目标文件,简单! 多人聊天室 ...

    成百上千个Java 源码DEMO 4(1-4是独立压缩包)

    日历表格面板 [ConfigLine.java] 控制条类 [RoundBox.java] 限定选择控件 [MonthMaker.java] 月份表算法类 [Pallet.java] 调色板,统一配色类 Java扫雷源码 Java生成自定义控件源代码 2个目标文件 Java实现HTTP连接...

    CORBA Networking with Java.pdf

    Doss撰写,出版社为Wordware Publishing, Inc.,ISBN号为1556226543,出版日期为1998年12月1日。本书旨在介绍如何利用CORBA(Common Object Request Broker Architecture,通用对象请求代理系统)与Java技术进行...

    成百上千个Java 源码DEMO 3(1-4是独立压缩包)

    日历表格面板 [ConfigLine.java] 控制条类 [RoundBox.java] 限定选择控件 [MonthMaker.java] 月份表算法类 [Pallet.java] 调色板,统一配色类 Java扫雷源码 Java生成自定义控件源代码 2个目标文件 Java实现HTTP连接...

    JAVA入门1.2.3:一个老鸟的JAVA学习心得 PART1(共3个)

    第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 SE 11 语言规范.pdf

    文档由Java语言的主要发明者和贡献者所著,包括James Gosling、Bill Joy、Guy Steele、Gilad Bracha和Alex Buckley等,其版本号为11,最终发布日期为2018年9月。 这份官方规范主要分为以下几个部分: 1. 绪论:...

    Java入门1·2·3:一个老鸟的Java学习心得.PART3(共3个)

    第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各版本[定义].pdf

    Java EE 5在2006年5月11日发布,它简化了基于Java EE的应用程序开发,增加了对注解的支持,并引入了Java Persistence API(JPA)。 Java SE 6(Mustang)发布于2006年12月11日,这一版本优化了性能、增强了脚本语言...

    Java面试宝典-经典

    Java基础部分 7 1、一个".java"源文件中是否可以包括多个类(不是内部类)?有什么限制? 7 2、Java有没有goto? 7 3、说说&和&&的区别。 8 4、在JAVA中如何跳出当前的多重嵌套循环? 8 5、switch语句能否作用在byte...

    JAVA上百实例源码以及开源项目源代码

    日历表格面板 [ConfigLine.java] 控制条类 [RoundBox.java] 限定选择控件 [MonthMaker.java] 月份表算法类 [Pallet.java] 调色板,统一配色类 Java扫雷源码 Java生成自定义控件源代码 2个目标文件 Java实现HTTP连接...

    java源码包4

     Tcp服务端与客户端的JAVA实例源代码,一个简单的Java TCP服务器端程序,别外还有一个客户端的程序,两者互相配合可以开发出超多的网络程序,这是最基础的部分。 递归遍历矩阵 1个目标文件,简单! 多人聊天室 ...

    Java软件中级工程师笔试题-复杂逻辑.docx

    **解析:** 在Java中,`Date`类中的`getMonth()`方法返回的是月份的0基序号(即0代表1月,1代表2月等)。`getDate()`方法返回的是该月的具体日期(如8)。 **答案:** 假设今天是9月8日,则输出 `"8 8"`。 #### 五、...

    Java运行原理 javap命令运行结果

    - **#5**:表示父类`java.lang.Object`的符号引用 - ... (其他常量省略) 3. **方法描述**: - **()**:构造方法,用于初始化对象。 - **main([Ljava/lang/String;)V**:主方法,是程序的入口点,它接受一个字符...

    java面试题大全(2012版)

    Java基础部分 7 1、一个".java"源文件中是否可以包括多个类(不是内部类)?有什么限制? 7 2、Java有没有goto? 7 3、说说&和&&的区别。 8 4、在JAVA中如何跳出当前的多重嵌套循环? 8 5、switch语句能否作用在byte...

    java操作elasticsearch5.x的demo

    Java操作Elasticsearch 5.x的Demo详解 在大数据时代,Elasticsearch作为一个高效、可扩展的全文搜索引擎,被广泛应用于日志分析、实时监控、数据挖掘等领域。本篇文章将详细解析如何使用Java API来操作Elastic...

Global site tag (gtag.js) - Google Analytics