2-1 父类Object中equals方法相关问题

2-1 父类Object中equals方法相关问题

老师关于2-1课程内容请指导一下 看下我的理解对嘛:

public static void main(String[] args) {
		//新建实例对象 调用父类双参构造 
		Animal1 one=new Animal1("星星",2);
		Animal1 two=new Animal1("闪闪",2);
		//equals:继承Object中的equals方法时,比较的是两个引用是否指向同一个对象
//		one=two; 此时两个对象指向同一个地址???
		boolean flag=one.equals(two);
		System.out.println("one和two的引用比较:"+flag);
		System.out.println("one和two的引用比较:"+(one==two));	

1.Object是Animal的父类,因此在这段代码中,创建对象继承的是Object中默认的equals方法,此时equals方法相当于“==”功能,也就是引用one和引用two是否指向一块内存空间?如果举反例在代码中让输出结果为true,是不是要把对象two赋值给one,这样就是共用一块内存?

//创建两个字符串  通过new关键字形式  String类型中有带参构造的形式可以通过new关键字直接构造一下
		//因为在String类型当中 自己重写了父类Object当中equals方法 只比的是字符串内容
		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)); //用关键字指向的不同空间
	}

2.而在此段代码中 用String创建对象,则是自己重写好了Object父类中的equals方法,此时方法比较的是参数的内容是否相等,这样理解对嘛?

3.迷惑点:

(1)Animal one的意思怎么解释?是创建对象one吗?和对象引用一样吗或者有什么区别?

(2)第二个flag为什么不用定义为Boolean值了 是因为它在String方法中不作这种形式吗?

(3)如果是子类如Cat 他也同时是Object的子类吗 相当于有两个父类 一个是创建的一个是默认的?


正在回答

登陆购买课程后可参与讨论,去登陆

1回答

同学你好,

1、对于第一个问题,你的理解是正确的。

2、对于第二个问题,你的理解是正确的。

3、(1)Animal one;代表声明一个Animal类型的对象引用one,在内存中是不会创建空间的,而Animal1 one=new Animal1("星星",2);代表在内存中开辟空间,创建one对象存储的。

(2)因为flag为变量,同名的变量,在类中只需要声明一次,否则会编译报错哦!

(3)子类Cat是Object类的孙子类,因为在Java中规定继承是单一继承的!而不会有两个父类哦~

如果我的回答解决了你的疑惑,请采纳!祝学习愉快!


  • 慕后端4084011 提问者 #1
    那孙子类中能重写Object类中的方法吗?默认继承Object类,是不是表示只有父类可以继承?2-3选择题中b答案说所有类都可以继承Object中允许被继承的方法,怎么理解?
    2019-10-12 17:03:32
  • 好帮手慕酷酷 回复 提问者 慕后端4084011 #2
    同学你好,孙子类也是可以重写Object方法的,因为子类继承了Object的方法,孙子类继承了子类的方法,也就继承了Object中允许被继承的方法,并不是只有父类可以继承,简单理解,其实就是所有类都是可以继承自Object类中允许被继承的方法,所以b选项是正确的描述。如果我的回答解决了你的疑惑,请采纳!祝学习愉快!
    2019-10-12 17:27:27
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师