文章目录
object类
- 一个类不写extends,则默认直接父类是object
- 写了extends则object是间接父类
小知识
- 类名按住ctl+左键跳转至类的定义
- ctl+t可以查看类的继承关系
- ctl+o可以快速outline查看类里面所有的方法和属性
关于eclipse中空格补全的问题
新版eclipse已经修复了,解决办法参考一下这个eclipse中空格补全代码问题的解决方法
equals方法
eclipse中快速重写equals()和hashcode()的方法
1. eclipse,在自定类中,选择左上方source->Generate hashcode() and equals()
2. alt+shift+s
“==”和equals的区别
- “==”代表比较双方是否相同。如果是基本类型则表示值相等,如果是引用类型则表
示地址相等即是同一个对象。 - Object 类中定义有:public boolean equals(Object obj)方法,提供定义“对象内容
相等”的逻辑。比如,我们在公安系统中认为 id 相同的人就是同一个人、学籍系统中认为学号相同的人就是同一个人
package com.ssc.inherit;
import java.util.Objects;
public class User {
int age;
String name;
String pwd;
public User(int age,String name,String pwd) {
// TODO Auto-generated constructor stub
this.age =age;
this.name =name;
this.pwd =pwd;
}
@Override
public int hashCode() {
return Objects.hash(age);
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
User other = (User) obj;
return age == other.age;
}
public static void main(String[] args) {
// TODO Auto-generated method stub
User uUser1 = new User(1001,"颤三","123456");
User uUser2 = new User(1001,"里斯","123456");
System.out.println(uUser1);
System.out.println(uUser2.toString());
System.out.println(uUser1 == uUser2);
System.out.println(uUser1.equals(uUser2)); //判断两个对象逻辑是不是一样的
}
}
/*输出结果:
com.ssc.inherit.User@408
com.ssc.inherit.User@408
false
true
*/
super()
super的作用
- super“可以看做”是直接父类对象的引用。可以通过 super 来访问父类中被子类覆盖的方法或属性。
- 使用 super 调用普通方法,语句没有位置限制,可以在子类中随便调用。
super使用
- 如果一个构造器第一行没有写super方法,会自动添加一个无参数的super()或者this()方法
- 如果父类中没有无参构造方法,那么子类必须用super(带参)显示的调用父类的构造方法。
- 参考这篇文章可以更深刻的理解java中构造方法的理解,super()与构造方法,无参,有参构造方法,this()与构造方法。
属性和方法的调用顺序
构造方法的调用顺序
package com.ssc.inherit;
public class SuperTest2 {
public static void main(String[] args) {
// TODO Auto-generated method stub
System.out.println("开始创建一个对象。。。。");
new ChildClass2();
}
}
class FatherClass2{
public FatherClass2() {
// TODO Auto-generated constructor stub
System.out.println("父类对象");
}
}
class ChildClass2 extends FatherClass2{
public ChildClass2() {
//默认的会在子类的构造方法的第一行加super()或者是this(),编译器自动会帮你加
System.out.println("子类对象");
}
}
输出结果:
开始创建一个对象。。。。
父类对象
子类对象