com.itbaizhan.op;
TestEqual {
(String[] args) {
Sing p1=Sing(,);
Sing p2=Sing(,);
System..println(p1==p2);
System..println(p1.equals(p2));
}
}
Sing {
;
String ;
(id, String name){
.=id;
.=name;
}
}
(Object obj) {
(obj == ){
;
}{
(obj Person) {
Person c = (Person)obj;
(c.id==.id) {
;
}
}
}
zhe
;
}
}这是为什么

看不到你完整的代码 检查id属性是否是private' 如果是 只能调用get方法获取属性 不能直接调用属性
public class Student extends Person {
public Student() {
}
public Student(String name, int age) {
super(name, age);
System.out.println("Student 构造器被调用,此处可以完成父类的初始化工作,实际上就是调用父类的构造器");
}
public void study() {
System.out.println("学生学习");
}
public static void main(String[] args) {
Student student = new Student("张三", 20);
student.eat();
student.study();
}
}老师为什么这个main主函数可以放在Student类里面运行,那Student不是在自己的类内部创建自己的对象了嘛
main方法可以再任何类里面运行的
在main方法中创建Student对象,只是普通的对象实例化行为,和其他类创建Student对象没有区别的
不是“自己创建自己”只是main创建了它的一个实例
这个哪里出错了,看不出来不知道怎么错了
不太理解,没搞懂
第一,比较方法写在类外面了
第二,构造方法写的错的,没有void

这个是因为你的obj是Object类型的,和Person02不是一个类型,使用不了其中的属性的
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
TestEquals that = (TestEquals) o;
return id == that.id;
}老师请问以下,IDEA自动生成的重写equals方法:
TestEquals that = (TestEquals) o;
这行代码没看懂,尤其是等号后面的
TestEquals that = (TestEquals) o;
TestEquals 这个是你的当前类,o是你传递的要比较的类,(TestEquals) o;这个是把Object这个传递的参数强转成了TestEquals类型的,完后去做比较
@Override
public boolean equals(Object obj) {
return super.equals(obj);
}(Object obj) {
.equals(obj)}为啥我导入equals方法是这样的,和老师的不一样?
同学,代码可以放代码区么,这里下面的代码乱码了
没懂哦老师
代码没有放到代码区的话这里是乱码的
代码没有显示错误但适配不成功运行不了
没有main方法呀,把测试的代码放到main方法里
TestObject Object {
String String (idString nameString pwd){
}
String () {
+++}
(String[]args){
TestObject t2 = TestObject()TestObject t3 = TestObject()System..println(t2.toString())System..println(t3.toString())System..println(t2.equals(t3))}
}老师为什么这个结果的用户名跟密码都是null
代码放到代码区,代码语言选择java,这样的代码看不了

老师可以给我一下概念名词吗比如类方法什么之类的或者给我发文件 像第六行第十行这些叫什么啊
这些概念名称老师这里也没有,这些东西在视频老师都有讲到,6行是创建类,关键字为class, extends是继承的关键字,10行是本类的构造方法,也就是这个TestObject这个类的,构造方法无返回值,非void修饰,方法名需要和类名保持一致,
package com.JB.yhb;
public class TestObject {
public static void main(String[] args) {
Person2 s=new Person2(18,171,"高尚");
TestObject t=new TestObject();
s.rest();
System.out.println(s.age+" "+s.height+" "+s.name);
System.out.println(t.toString());
System.out.println(s);
}
}
class Person2 extends Object{
String name;
int age;
int height;
public Person2(int age,int height,String name){
this.age=age;
this.height=height;
this.name=name;
System.out.println("你好");
}
@Override
public String toString() {
return null;
}
public void rest(){
System.out.println("休息一会!");
}
}
为什么编译之后,t的地址显示出来了,s显示null呢
重写toString方法。不要返回null.
com.JB.yhbTestObject {
(String[] args) {
Person2 s=Person2()TestObject t=TestObject()s.rest()System..println(s.++s.++s.)System..println(t.toString())System..println(s)}
}
Person2 Object{
String (ageheightString name){
.=age.=height.=nameSystem..println()}
String () {
}
(){
System..println()}
}为什么编译之后,t的地址显示出来了,s显示null呢
已回复
为什么这里用的是that,它和this有什么区别吗?

这个that和this没有任何关系,这里that是对象名,可以是任意的。
重写equals 对象的地址也变成一样的了 这是为啥
我看一下你重写equals方法后,方法里是怎么定义的
在equals不重写的情况下,equals与==有什么区别
在不重写的情况下 equals就是==。
User {
String String (idString nameString pwd){
.=id.=name.=pwdSystem..println(+id++name++pwd)}
(String[]args){
User u1=User()User u2=User()System..println(u1)System..println(u2.toString())System..println(u1==u2)System..println(u1.equals(u2))}
}第一次运行输出结果
id1001name1pwd123456
id1001name1pwd123456
com.zhang.test.User@15aeb7ab
com.zhang.test.User@7b23ec81
false
false
去掉/*后运行结果
id1001name1pwd123456
id1001name1pwd123456
com.zhang.test.User@408
com.zhang.test.User@408
false
true
使用equal方法后会直接对比实际数值,使输出结果产生上面这样的变化吗
代码放到代码区,选择java,不然格式不对,无法查看代码。

User {
String String (idString nameString pwd){
.=id.=name.=pwdSystem..println(+id++name++pwd)}
(String[]args){
User u1=User()User u2=User()System..println(u1)System..println(u2.toString())System..println(u1==u2)System..println(u1.equals(u2))}
}
这里选择一下java,放到出现的横框中,这个代码你不觉得看不懂嘛
