Java中super和this的用法和区别

一、this是自身的一个对象,代表对象本身,可以理解为指向对象本身的一个指针
this是用来访问本类实例属性和方法的,它会先从本类中找,如果本类中找不到则在父类中找

  1. this属性使用:用来赋值本类属性(最常见的用法),写类时的setter方法

    eg:

    public void setId(int id) {
            this.id = id;
        }
    
  2. this方法使用:可以使用this()( 这个方法指的是this.(构造方法) )方法来调用本类中的构造方法,这个方法和super一样,如果显示的调用,只能放在方法的首行,不然会报错

  3. this访问父类方法:

    this.父类的方法名
    

    是可以访问到的,也就是说它会先从本类中找,如果本类中找不到则在父类中找

二、super可以理解为指向自己超(父)类的一个指针,而这个超类指的是离自己最近的一个父类
super是用来访问父类实例属性和方法的

  1. 如果没有显示指定super()方法( 这个方法指的是super.(构造方法) ),那么子类会生成一个隐藏的super()方法,用来调用父类的无参构造方法,每个类在实例化的时候之所以能调用到Object类(是所有类的父类),就是默认super方法起作用了

  2. 注意:如果要显示使用super()( 这个方法指的是super.(构造方法) )方法,那么super()方法必须放在构造方法的首行,否则编译器会报错。放在首行是为了在实例化子类时才能确保父类已经先被初始化了

  3. 使用父类方法一定要用super吗?不一定。只有当子类重写了父类的方法时,如果需要用到父类的方法时,才要用super,表明这个方法是父类的方法不是子类的方法。

    eg:

    super.父类的方法名
    
  4. super还可以调用父类的属性

    super.父类的属性名
    

三、this和super的不同

  1. 指代的对象不同

    super指代的是父类,是用来访问父类的

    this指代的是当前类

  2. 查找范围不同

    super只能查找父类

    this会先从本类中找,如果找不到则会去父类中找

  3. 本类属性赋值不同

    this可以用来给本类的实例属性赋值

    super不可以

  4. this可用于synchronized

关于父类子类的继承

子类即使不扩充父类,也能维持父类的操作

Java之中只允许多层继承,不允许多重继承,Java存在单继承局限

如果要实例化子类对象,会默认先调用父类构造,为父类之中的属性初始化,之后再调用子类构造,为子类之中的属性初始化,就是相当于隐含了一个super()的形式,super调用父类构造时,一定要放在构造方法的首行上

Object

Object类是Java类层次最顶层的基类(父类),所有类都是直接或间接继承自Objec类,因此所有类都可以使用Object中的成员方法

位于java .lang包中,编译时会自动导入

posted @ 2024-10-23 14:41  ragworm  阅读(276)  评论(0)    收藏  举报