zoukankan      html  css  js  c++  java
  • 菜鸡的Java笔记 Object 类

    Object 类
            Object类 的主要作用
            Object 类的常用方法
            
        内容
            虽然有了对象的向上转型,可以解决了参数的统一问题,但是面对JAVA 开发之中如此众多的开发类
            所以现在就面临这样一个问题:参数类型怎么选择才能够保存所以的类对象呢?
            为此java里面考虑到了此种情况有一个Object类
            此类定义:public class Object
            可以发现在整个对的java里面只有Object 类的定义的时候没有定义父类,而其他的所有类都是Object类的子类
            也就是说在整个java之中,除了Object类之外,一切都存在有继承关系
            
            理论上定义一个类的时候如果没有继承任何的父类,那么其将默认继承Object类
            这样的直接好处就是,所以类的对象都可以使用Object来接收
            范例:利用Object接收对象

    class Person{
        
    }
    public class objectclass{
        public static void main(String args[]){
        Object obj = new Person();// 向上转型    
        }
    }

               
                利用Object可以实现最终的参数类型的统一
                
            清楚了 Object 类的作用之后,下面要完善一些操作:
                在简单java类的时候需要提供有一个 getInfo() 的方法以返回对象信息
                在进行简单java类对象比较的时候准备有一个 compare() 方法进行比较
            那么从现在开始以上的这两个方法需要换名,在 Object 类里面定义有一下的两个匹配方法
                取得对象信息: public String toString();
                对象比较: public boolean equals(Object obj);
                
        取得对象信息
            如果说现在直接输出一个对象,默认输出的是一个对象的地址编码
            范例:观察默认的 toString    

    class Person{
        
    }
    public class objectclass{
        public static void main(String args[]){
        Person p = new Person();
        System.out.println(p);
        System.out.println(p.toString);
        }
    }

               
                通过此代码可以发现,在默认情况下如果要输出一个对象都会执行 toString()方法,不管是否显式调用此方法
                于是 Object 类对于此方法就有了一个自己的默认实现,虽然不知道每个对象输出时都需要那些,但是至少知道每个对象存在都会有一个地址编码
                所以默认的输出内容就是对象的编码信息
                如果用户现在不希望输出编码,而希望输出具体的内容,则可以进行方法的覆写
            范例:覆写 toString() 方法

    class Person{
        private String name;
        private int age;
        public Person(String name,int age){
            this.name = name;
            this.age = age;
        }
        public String toString(){
            return "姓名:"+this.name+";年龄:"+this.age;
        }
    }
    
    public class objectclass{
        public static void main(String args[]){ // 为了方便模拟化调用
            Person p = new Person("枫",20);
            System.out.println(p);
            
        }
    }


        对象比较:equals()
            对象比较在之前曾经使用过compare()方法进行表示,而且最为重要的是在之前实现对象比较时比较的流程:地址是否为空,属性是否相同
            范例:实现对象比较

    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 == null){ // 没得比
                return false;
            }
            if(!(obj instanceof Person)){
                return false;// 两个对象没关系
            }
            Person per= (Person)obj;
            if(this.name.equals(per,name)&&this.age == per.age){
                return true;
            }
            return false;
        }
        public String toString(){
            return "姓名:"+this.name+";年龄:"+this.age;
        }
    }
    
    public class objectclass{
        public static void main(String args[]){ // 为了方便模拟化调用
            Person p1 = new Person("枫",20);
            Person p2 = new Person("枫",20);
            System.out.println(p2); // 有BUG 如果传进来的是字符串就会出错,所以以后有判断就.....
            
        }
    }

                   
                    以后开始,所编写对象比较操作,都以 Object 类的 equals()方法为主

        Object 类可以接收一切引用类型
            java的引用类型包含:数组,类,接口。现在已经证明了所有的类对象都可以使用 Object 进行接收
            可是数组和接口,他们也可以被 Object接收
            范例:利用 Object接收数组对象

    public class objectclass{
        public static void main(String args[]){
            Object obj = new int[]{1,2,3};//利用Object接收整型数组,向上转型
            if(obj instanceof int[]){ // 对象是否是int数组
                int data[] = (int[])obj;//向下转型
                for(int x = 0;x<data.length;x++){
                    System.out.println(data[x]);
                }
            }
        }
    }                

                   
            除了可以接收数组之外,接口也可以接收
            范例:辅助概念

    interface A{// 定义了一个接口
        public void ptintA();
    }
    
    interface B{
        public void ptintB();
    }
    class X implements A,B{
        public void ptintA(){
            System.out.println("AAAAAAAAAAAAAAA");
        }
        public void ptintB(){
            System.out.println("BBBBBBBBBBBBBBBB");
        }
    }
    public class Interface{
        public static void main(String args[]){
             A a = new X();//向上转型
             B b = (B)a;// 虽然A与B没有关系,但是X是B的子类
             b.ptintB();
        }
    }


        按照以上的思路解决Object 接收接口对象的问题

    interface A{// 定义了一个接口
        public void ptintA();
    }
    class X equals Object implements A{
        public void ptintA(){
            System.out.println("AAAAAAAAAAAAAAA");
        }
    }
    public class Interface{
        public static void main(String args[]){
             A a = new X();//向上转型
             Object obj = a;// 向上转型
             A temp = (A)obj; // 向下转型
             temp.ptintA();
        }
    }

               
                Object 所有引用类型都可以接收,对于 数据的统一性操作上更加方便了

        总结
            1.Object类是所有类的父类,可以接收所以引用数据类型
            2.Object类提供的 toString()与 equals()方法可以应用在简单java类中


  • 相关阅读:
    换个格式输出整数
    c++入门构造函数
    接口继承与实现
    spring mvc 之@requestmapping
    RabbitMQ
    Socket通信原理
    TCP三次握手与四次挥手
    WIN 10家庭版没有Hyper-V
    aop 切面demo
    JVM之旅------jvm内存模型
  • 原文地址:https://www.cnblogs.com/mysterious-killer/p/10123684.html
Copyright © 2011-2022 走看看