别样JAVA学习(五)继承上(1.1)Object类toString()

接下来说完equals以后,我们学习接下来的toString(),

Java又认为所有对象不光具有比较性,

还能使对象变成字符串被打印。

class Demo
{
	private int num;
	Demo(int num)
	{
		this.num=num;
	}
	public boolean compare(Demo d)
	{
		return this.num==d.num;
	}
	public boolean equals(Object obj)
	{
		if(!(obj instanceof Demo))
			return false;
		Demo d=(Demo)obj;
		return this.num==d.num;
	}
}
class ObjectDemoToString
{
	public static void main(String[] args)
	{
		Demo d1=new Demo(4);
		System.out.println(d1.toString());
	}
}
出现



以前前面显示的是数组,现在显示的是这个对象所属的类,

紧跟着是这个对象的哈希值,也就是所有的对象都有哈希值(内存地址)。

接下来,修改ObjectDemoToString class类

class ObjectDemoToString
{
	public static void main(String[] args)
	{
		Demo d1=new Demo(4);
		System.out.println(Integer.toHexString(d1.hashCode()));//哈希值转化成16进制
		System.out.println(d1.toString());//将d1对象地址打印出来
	 }
}
一个对象的建立是不是要依赖于类文件?对不对。

曾经讲过进内存的时候类文件是不是被封装成对象了。

类文件里面既有构造函数,又有一般方法,以及成员变量。

要想获得其中一项东西的话,你是不是封装成对象之后,

在这对象里面定义很多功能,是不是调用非常方便。

怎么拿构造函数是不是对象最清楚!对不对。


所以呢这些对象都是依赖于class文件创建的,

class文件已被封装对象,这个对象怎么表示呢,看下面

class ObjectDemoToString
{
	public static void main(String[] args)
	{
		Demo d1=new Demo(4);
                Class c=d1.getClass();//获取对象d1的类
		System.out.println(c);
		System.out.println(Integer.toHexString(d1.hashCode()));
		System.out.println(d1.toString());
	}
}

结果:


这些class文件都有名称,构造函数,

getMethods()可以从.class文件中拿到所有的定义方法

甚至定义的私有方法都能拿得到,

你不用给我源文件都知道,这个称为反编译。


class ObjectDemo
{
	public static void main(String[] args)
	{
		Demo d1=new Demo(4);
		Class c=d1.getClass();
		System.out.println(c.getName()+'@'+Integer.toHexString(d1.hashCode()));
		System.out.println(Integer.toHexString(d1.hashCode()));
		System.out.println(d1.toString());
	}
}
toString()=getClass().getName()+'@'+Integer.toHexString(d1.hashCode())

接下来,这个地址有意义么,如果想要对象对应的字符串有意义怎么做?


在Demo()中覆写

	public String toString()
	{
		return "demo:"+num;
	}

创建自己的字符串表示形式。父类默认的一般没多大意义,一般都覆写

写类描述的时候这些方法都有可能被覆写,那么这时候产生问题,

如果都覆写,干脆把它抽象不就完了?

抽象完了以后object是不是也被抽象了。那么随便定义一个类是不是

都会强迫你去定义里面包含的方法,这是不是很麻烦。

况且大家有听说过上帝有抽象的么?上帝不是总是活在子民心中的么~


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值