zoukankan      html  css  js  c++  java
  • Java菜鸟学习笔记--面向对象篇(十六):Object类方法

     

    Object类


    什么是Object类?


    Object类是所有Java类的祖先,每个类都使用 Object 作为超类,所有对象(包括数组)都实现这个类的方法Object类是类层次结构的根,Object类是Java中唯一没有父类的类。其他所有的类,包括标准容器类,比如数组,都继承了Object类中的方法。



    Object类方法有哪些?





    toString方法

    首先toString()方法是Object根类的一个默认方法

    咱试一试输出一下默认的方法
    //重写toString方法
    package me.tostring;
    
    public class ToString{
    	
    		public static void main(String[] args){
    			
    			Dog jim=new Dog();
    			System.out.println("Dog "+jim);//直接在里面jim,默认等于jim.toString()
    			
    			
    		}
    }
    
    class Dog{
    	
    	
    
    }
    然后编译后运行,输出结果为:
    /*输出:
    			Dog me.tostring.Dog@545ec940
    			*/
    为什么会是这样呢?既然是父类Objcet定义的方法,那就去文档查看说明



    说明中看出了两点:1.默认的方法是返回 如上的格式。2.推荐子类根据需求重写这个方法

    那就重写试一试咯,以防在Override时候书写出错,直接在文档copy方法声明肯定错不了~

    //重写toString方法
    package me.tostring;
    
    public class ToString{
    	
    		public static void main(String[] args){
    			
    			Dog jim=new Dog();
    			System.out.println("Dog "+jim);
    			/*输出:
    			Dog me.tostring.Dog@545ec940
    			*/
    			
    		}
    }
    
    class Dog{
    	
    	//重写方法
    	@Override
    	public String toString(){
    		
    			return "这个方法被我重写了";
    		
    		}
    
    }

    其中

    @Override//这是什么意思?-意思告诉编译器下面的方法我是要重写父类的,你检查严格点,不是重写(拼写错误等等)会编译报错

    编译运行

    Dog 这个方法被我重写了
    

    成功Override这个方法。




    equals方法的运用与重写



    文档中关于equals的解释





    equals()--和老婆买猫的故事



    今天和老婆去逛街,正好看见猫,长得和加菲猫差不多,看着合适准备入手,和小饭谈好价格交了押金然后取钱去了

    class Cat{
    	//猫的一些特征
    	private String color;
    	private String height;
    	private String weight;
    
    	Cat(){}
    	Cat(String color,String height,String weight){
    		this.color=color;
    		this.height=height;
    		this.weight=weight;
    	}	
    }
    预订好的猫
    Cat huahua=new Cat("red","2","3");

    然后回来了,坑爹小贩把猫卖给别人了,老婆当然不愿意了,小贩说还有一直一模一样的猫,您看着应该也合适
    Cat ruhua=new Cat("red","2","3");

    合适不?看看咯
    System.out.println(huahua == ruhua);//输出false
    		//按老婆这个算法买一万只也不一样,== 判断依据是引用的指向空间地址是否一样啊

    这样比较一万只猫也不一样啊,换个方式比较咯,那就用Object的提供的equals()方法吧
    System.out.println(huahua.equals(ruhua));//输出false,还是不一样哪里出问题了?

    哪里问题?看文档如上,原来equals默认按是否指向同一个对象为依据啊~,那就只有重写咯


    	
    	@Override//生命老子要改写了,编译器你注意着点
    	//看完文档直接复制声明,以防出错,双保险
    	public boolean equals(Object obj){
    		//第一种情况,空引用,什么都不是肯定返回false啊	
    		if(obj == null) return false;
    		//第二种情况,首先你是猫,我再看你颜色身高体重一样不
    		else if(obj instanceof Cat){
    		
    			//既然是猫就转换类型
    			Cat mimi=(Cat)obj;
    			//判断身高体重颜色是不是一样,一样我就买
    			if(this.color==mimi.color&&this.height==mimi.height&&this.weight==mimi.weight){
    					return true;
    			}
    			//身高体重不一样我就认为和刚刚那一只不一样,
    			else return false;
    		}
    		//其他情况可能是什么老虎啊什么的当然不买咯
    		else return false;
    		
    		
    		
    	}
    	
    	

    这回看你还不一样不?这回趁心如意了,只有外观差不多都是加菲猫~
    	System.out.println(huahua.equals(ruhua));//这会儿一样了把,老婆高兴了吧

    高高兴兴回家了。


    源码


    //陪老婆买猫
    package me.equals;
    
    public class Equals{
    	
    	
    	public static void main(String[] args){
    		
    		Cat huahua=new Cat("red","2","3");
    		//看中了猫交押金回家拿钱,结果猫给人先买走了,小贩说有只一模一样的啊
    		Cat ruhua=new Cat("red","2","3");
    		//老婆说看一样不一样就买
    		System.out.println(huahua == ruhua);//输出false
    		//按老婆这个算法买一万只也不一样,== 判断依据是引用的指向空间地址是否一样啊
    		//那就用Object的提供的equals()方法吧
    		System.out.println(huahua.equals(ruhua));//输出false,还是不一样哪里出问题了?
    		//查文档,原来默认的equals()方法坑爹啊,也是是否指向同一对象为依据
    		//那就改写这个方法咯
    		
    		System.out.println(huahua.equals(ruhua));//这会儿一样了把,老婆高兴了吧
    		
    	}
    
    	
    }
    //猫类
    class Cat{
    	//猫的一些特征
    	private String color;
    	private String height;
    	private String weight;
    
    	Cat(){}
    	Cat(String color,String height,String weight){
    		this.color=color;
    		this.height=height;
    		this.weight=weight;
    	}
    		
    	@Override//生命老子要改写了,编译器你注意着点
    	//看完文档直接复制声明,以防出错,双保险
    	public boolean equals(Object obj){
    		//第一种情况,空引用,什么都不是肯定返回false啊	
    		if(obj == null) return false;
    		//第二种情况,首先你是猫,我再看你颜色身高体重一样不
    		else if(obj instanceof Cat){
    		
    			//既然是猫就转换类型
    			Cat mimi=(Cat)obj;
    			//判断身高体重颜色是不是一样,一样我就买
    			if(this.color==mimi.color&&this.height==mimi.height&&this.weight==mimi.weight){
    					return true;
    			}
    			//身高体重不一样我就认为和刚刚那一只不一样,
    			else return false;
    		}
    		//其他情况可能是什么老虎啊什么的当然不买咯
    		else return false;
    		
    		
    		
    	}
    	
    	
    }


    equals()--String类默认重写

    String类默认已经对由Object继承过来的equals()方法重写了,怎么样?查文档就知道了



    文档说明很明确,返回true的前提是:

    参数不为null

    这个参数是个String对象并且存储的字符串和调用者存储的字符串一模一样

    这两个成立就可以返回true了。



    作者:YangGan
    出处: http://blog.csdn.net/incyanggan
    本文基于 署名 2.5 中国大陆 许可协议发布,欢迎转载,演绎或用于商业目的,但是必须保留本文的署名Yanggan (包含链接).


  • 相关阅读:
    RedisHelper
    2010年:Socket实践问题求助解决一贴通
    React Hooks 父组件调用子组件的方法
    React Hooks 进入页面以后自动 focus 到某个输入框
    react hooks 太多的useState 显得很冗余,有没有什么规整的方法呢?
    react项目取消部分eslint检查
    使用useMemo优化性能
    react的useEffect 第二个参数
    如何使用 Postman Interceptor(可以拦截浏览器的请求到postman)
    react阻止事件冒泡
  • 原文地址:https://www.cnblogs.com/jiangu66/p/3221656.html
Copyright © 2011-2022 走看看