Java学习(53)Java继承——Object类介绍

1. 概述

(1) Object类是所有类的父亲;
(2) 一个类没有使用extends关键字明确标识继承关系,则默认继承Object类(包括数组);
(3) Java中的每个类都可以用使用Object中定义的方法

2. Java查看api

网址:www.oracle.com/technetwork/java/api-141528.html
docs.oracle.com/javase/8/docs/api/

3. Object中的equals方法

(1) 创建测试类TestThree:

package com.study.test;

import com.study.animal.Animal;

public class TestThree {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Animal one=new Animal("花花",2);
		Animal two=new Animal("花花",2);
//		Animal two=null;
		/*equals测试:
		 * 1、继承Object中的equals方法时,比较的是两个引用是否指向同一个对象
		 * 2、子类可以通过重写equals方法的形式,改变比较的内容
		 */
		boolean flag=one.equals(two);
		System.out.println("one 和 two的引用比较:"+flag);
		System.out.println("one 和 two的引用比较:"+(one==two));

运行结果:

one 和 two的引用比较:false
one 和 two的引用比较:false

equals:继承Object中的equals方法时,比较的是两个引用是否指向同一个对象。
(2)

		String str1=new String("hello");
		String str2=new String("hello");
		flag=str1.equals(str2);
		System.out.println("str1 和 str2的引用比较:"+flag);
		System.out.println("str1 和 str2的引用比较:"+(str1==str2));

运行结果:

str1 和 str2的引用比较:true
str1 和 str2的引用比较:false

注:
a. System.out.println("str1 和 str2的引用比较:"+(str1==str2));结果为false的原因是这里比较的str1与str2指向的空间是否相同,因此为false;
b. System.out.println("str1 和 str2的引用比较:"+flag);结果为true的原因是自己重写了父类Object中的equals方法,因此,这里比较的是str1与str2的内容是否相同,因此为true。
(3) 在子类Animal中重写父类Obiect的equals方法:
注:这里由于传入的参数为Object类型,因此需要进行强制转换。

	public boolean equals(Object obj){
		if(obj==null)
			return false;
		Animal temp=(Animal)obj;
		if(this.getName().equals(temp.getName()) && (this.getMonth()==temp.getMonth()))
				return true;
		else
			return false;
	}

再次运行(1)与(2)中的测试代码,则这里flag比较的是one与two里面的值是否相等,因此运行结果如下:

one 和 two的引用比较:true
one 和 two的引用比较:false
======================================
str1 和 str2的引用比较:true
str1 和 str2的引用比较:false

(4) 如果不想对传入参数进行转换,直接传入Animal类型的参数,如下:

	public boolean equals(Animal obj){
		if(obj==null)
			return false;
		if(this.getName().equals(obj.getName()) && (this.getMonth()==obj.getMonth()))
				return true;
		else
			return false;
	}

此时,这个方法相对于(3)中的equals方法而言就是一个方法的重载操作。
(5) 在对象之间相互操作时,空指针异常是一定要避免的情况!即如下代码必须考虑!

		if(obj==null)
			return false;

4. Object中的toString方法

(1) toString方法在Object类中的作用是打印出类的字符串表现形式:
getClass().gatName()+’@’+Integer.toHexString(hashCode())
注:在默认情况下,当我们在语句中直接输出对象名时,默认会自动调用toString方法。
(2) 测试

/*toString测试:
		 * 1、输出对象名时,默认会直接调用类中的toString
		 * 2、继承Object中的toString方法时,输出对象的字符串表示形式:类型信息+@+地址信息
		 * 2、子类可以通过重写equals方法的形式,改变输出的内容以及表现形式
		 */
		System.out.println(one.toString());
		System.out.println(one);
		System.out.println("======================================");
		System.out.println(str1);

运行结果:

com.study.animal.Animal@15db9742
com.study.animal.Animal@15db9742
======================================
hello

注:在打印对象名时,会调用类中的toString方法,而当打印字符串时,会输出字符串的值。
(3) 子类可以通过重写toString方法的形式,改变输出的内容以及表现形式
在Animal中重写toString方法:

	public String toString() {
		return "昵称:" + this.getName() + "年龄:" + this.getMonth();
	}

重写运行测试代码,则运行结果如下:

昵称:花花年龄:2
昵称:花花年龄:2
======================================
hello
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值