java面对对象-super详解

一、super

super:调用父类的关键字

在java的子类中指代父类引用

二、super使用

public void test(String name){

    System.out.println(name);
    System.out.println(this.name);
    System.out.println(super.name);

}

1.

name:指参数name

this.name:指实例化后的对象name

super.name:父类的name

this:指向当前类

super:指向父类

在这里插入图片描述

2.

print()和this.print():指的都是本类中的print方法

super.print():指的是父类的print()方法

在这里插入图片描述

3.

调用父类的构造器super();必须在子类构造器的第一行

一般情况(无参构造器+不写super()😉:super()是隐藏的,调用子类的时候,会第一时间先调用父类的无参构造器,然后才调用子类的无参构造器

public Student() {
    //一般不写的话,隐藏了代码super():来调用父类的无参构造
    super();//要调用父类的构造器,super();必须在子类构造器的第一行

    System.out.println("Student无参执行了");
}

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

4.

可以在子类构造器中调用父类有参构造器来实例化子类对象

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

5.

对于super();

默认会调用父类的无参构造器,在实例化子类的时候,就会执行对父类的无参构造器调用

如果父类没有无参构造器,并且只写了有参构造器,说明调用不了父类的无参构造器方法,那么要在子类构造方法中写上调用父类有参构造器的方法

例如:super(“name”);在这里插入图片描述在这里插入图片描述在这里插入图片描述

6.

同时,其它通过继承(默认有super();)理论上调用了父类的无参构造器,但父类没有无参构造器时,需要子类构造方法中需要调用父类有参构造器,来正常实例化子类对象

在这里插入图片描述
在这里插入图片描述

7.

如果子类写了有参构造器,但是没有写上无参构造器,那么子类是无法正常实例化的(硬要实例化的话需要加入参数,通过调用子类的有参构造方法来实例化子类对象)

即:Student student = new Student();报错

Student student = new Student(xiaoMing);通过

在这里插入图片描述在这里插入图片描述

硬要实例化的话需要加入参数,通过调用子类的有参构造方法来实例化子类对象

在这里插入图片描述

有子类无参构造器时,Student student = new Student()正常通过

在这里插入图片描述

在这里插入图片描述

三、super注意点:

1.super调用父类的构造方法,必须在构造方法的第一个

2.super必须只能出现在子类的方法或者构造方法中

3.super和this不能同时调用构造方法!

super Vs this:

代表的对象不同:

this:本身调用者这个对象

super:代表父类对象的引用

前提:

this:没有继承也可以使用

super:只能在继承条件下才可以使用

构造方法:

this();本类的构造

super();父类的构造

package My_Demo.First_Review.OOP.Demo04;

public class Person {

    public Person(String name) {
        System.out.println("父类Person有参构造执行了");
    }


    public  Person(){
        System.out.println("父类Person无参构造执行了");
    }
    private int money=10_0000_0000;

    public void say()
    {
        System.out.println("Are you OK?");
    }

    public int money() {

        return money;
    }

    public void setMoney(int money)
    {
        this.money = money;
    }
}

package com.OOP.Demo_05;

//学生 is 人 派生类、子类
//子类继承了父类,就会拥有父类的全部方法(私有除外)
public class Student extends Person {
    //Ctrl+H


    public Student(String name) {
        super(name);
        System.out.println("子类Student有参构造器执行了");
    }

    public Student() {
        //隐藏代码:调用了父类的无参构造
        super("name");//调用父类的构造器,super();必须在子类构造器的第一行

        System.out.println("子类Student无参构造器执行了");
    }

    private String name="李赣";

    public void print(){
        System.out.println("Student");
    }

    public void test1(){
        print();
        this.print();
        super.print();
    }

    public void test(String name){

        System.out.println(name);
        System.out.println(this.name);
        System.out.println(super.name);

    }

}
package com.OOP.Demo_05;

//Teacher is 人:派生类、子类
public class Teacher extends Person {

    public Teacher(String name) {
        super(name);
    }
}



package com.OOP.Demo_05;

public class Teacher extends Person {

    public Teacher() {
        super("sss");
        System.out.println("子类Teacher无参构造执行了");
    }
}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值