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、对于第一个问题,你的理解是正确的。
2、对于第二个问题,你的理解是正确的。
3、(1)Animal one;代表声明一个Animal类型的对象引用one,在内存中是不会创建空间的,而Animal1 one=new Animal1("星星",2);代表在内存中开辟空间,创建one对象存储的。
(2)因为flag为变量,同名的变量,在类中只需要声明一次,否则会编译报错哦!
(3)子类Cat是Object类的孙子类,因为在Java中规定继承是单一继承的!而不会有两个父类哦~
如果我的回答解决了你的疑惑,请采纳!祝学习愉快!
- 参与学习 人
- 提交作业 3802 份
- 解答问题 11489 个
本阶段带你迈入Java世界,学习Java必备基础知识,基础语法、面向对象思想以及常用工具类的使用。
了解课程
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星