zoukankan      html  css  js  c++  java
  • 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了完成。

  • 相关阅读:
    基本技能训练之线程
    关于UEditor的使用配置(图片上传配置)
    PAT 乙级练习题1002. 写出这个数 (20)
    codeforces 682C Alyona and the Tree DFS
    codeforces 681D Gifts by the List dfs+构造
    codeforces 678E Another Sith Tournament 概率dp
    codeforces 680E Bear and Square Grid 巧妙暴力
    codeforces 678D Iterated Linear Function 矩阵快速幂
    codeforces 679A Bear and Prime 100 交互
    XTUOJ 1248 TC or CF 搜索
  • 原文地址:https://www.cnblogs.com/edda/p/12602154.html
Copyright © 2011-2022 走看看