Object类:equal、super、toString
1.Object类
地位:所有类的父类、超类
2.1toSpring方法
①toString()
用打印方法传 一个对象,比如s,默认是调用s.toSpring()方法
根据它的源码得知,默认会返回“类名+@+16进制的hashcode”。在打印输出或者用字符串连接 对象时,会自动调用该对象的toString()方法。如大多数方法一样,可以在子类中对其进行重写(满足3个要求即可).例子:sout(p);
toString是Object的一个方法,试着在某个类里重写toString()
@Override告诉编译器下面的方法是重写过的方法?
return:返回一个值,结束方法
2.2==跟equals方法(两个引用对象比较时)
==:对象引用指向同一个对象则返回true,否则返回false
equals()方法默认与==一致,可以通过重写equals方法对对象进行多样性的方法
比如想要a.id相等则方法判断为true这种需求
&&2.3this、super关键字**
super关键字“可以看做”是直接父类对象的引用。
用处:用来在重写的方法中调用父类的已被重写的方法;当子类父类有相同属性时,super表示父类的属性,不过考虑到封装性,实际仍然是对父类方法的引用,例子:
// super和this关键字
// 属性、方法、构造方法的super
public class Demo4 extends Object{private int a;public void f() {System.out.println("父类的方法");}Demo4 () {System.out.println("调用了父类的无参构造");}Demo4 (int a){this.a = a;System.out.println("调用了父类的有参构造");}public int getA() {return a;}public static void main(String[] args) {// ①子类无参构造,实际上自动调用了super.Demo4()c c = new c();// ②子类有参构造,实际上也会自动调用super.Demo4()c c2 = new c(1,2);// ③通过super关键字 在重写方法里 调用父类方法c.f();// ④也可以访问父类属性(当然考虑到封装性,这里是getA方法)c2.valueTest();}}
class c extends Demo4 {private int a;private int b;// 子类无参构造,实际上 自动调用了super.Demo4()public c() {}// 子类有参构造,实际上 也会自动调用super.Demo4()public c(int a,int b) {this.a = a;this.b = b;}@Overridepublic void f() {super.f();// 通过super关键字 在重写方法里 调用父类方法System.out.println("父类的方法(重写)");}public void valueTest() {System.out.println(a);// 被System.out.println(super.getA());// 输出0,1,毕竟父类是未初始化}}
对于普通方法:super调用普通方法,语句没有位置限制,可以在子类中随便调用
对于构造方法:在类的构造方法中,如果第一行没有写super[…]或者this[…],实际上,系统也会自动加super[…],即自动调用父类的无参构造
注意:父类定义有参构造器后,需要显式定义一个无参构造,否则报“无可用无参构造”错误。因为父类定义有参构造后则不自动加无参构造,子类构造方法的第一行总是隐式调用父类的无参构造,无方法可调,自然报错