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;
    }
    @Override
    public 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[…],即自动调用父类的无参构造
注意:父类定义有参构造器后,需要显式定义一个无参构造,否则报“无可用无参构造”错误。因为父类定义有参构造后则不自动加无参构造,子类构造方法的第一行总是隐式调用父类的无参构造,无方法可调,自然报错

posted on 2026-01-16 23:49  VoidHan21  阅读(0)  评论(0)    收藏  举报