super详解

super

我们先创建3个类

Application 测试类

Person 父类

Student 子类

在这里插入图片描述

我们现在Person类里面定义一个属性

protected 受保护的

 protected String name = "最左";

然后我们在Student类里面定义一个属性

private 私有的

 private String name = "zuiyou";

我们继续在Student类里面输入

public void test(String name){
        System.out.println(name); //这是String name传递的参数
        System.out.println(this.name); //这是Student类里面的 name   子类
        System.out.println(super.name); //这是Person类里面的name    父类
    }

我们在Application类里面输出一下

先new一个Student

在这里插入图片描述

然后再里面输入

Student student = new Student();
student.test("最右");
   

输出

在这里插入图片描述

输出结果为 最右 zuiyou 最左

第一个 最右 是 我们在Application类里面给他赋的值

第二个 zuiyou 是Student类里面的值

第三个 最左 是Person 类里面的值

我们在Person里面写一个方法print方法

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

然后再Student类里面写一个print方法

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

然后在创建一个test1方法

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

在Application类里面输入

student.test1();

输出一下

在这里插入图片描述

发现输出了3个值 Student Student Person

前面2个Student 是子类里面的

后面那个Person 是父类里面的

我们在把Person类里面的 public 改成private就会发现

在这里插入图片描述

super.print 报错了

私有的东西可以被继承!,但是无法访问,只能在本类访问

我们在Person里面输入无参构造

public Person(){
       System.out.println("Person无参执行了");
   }

然后再Student类里面输入无参构造

public Student(){
    System.out.peintln("Student无参构造执行了")
}

然后再Application里面new一个Student

输出一下

在这里插入图片描述

为很么 先输出父类的无参构造之后才输出子类的无参构造

说明子类里面有一句隐藏代码,我们看不到的

默认调用了父类的无参构造

这里有个方法叫做super();

这行代码是隐藏的,他调用父类的

不然这就是为什么我new Student 他却把Person类里面的也给调用了

我们把

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

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

这2个调换一下位置

  System.out.println("Student无参构造执行了");
    }
super();  //调用父类的构造器,必须要在子类的第一行

就会发现

在这里插入图片描述

super报错了

也就是说super 调用父类的东西,必须放在第一行

所以 调用父类的构造器,必须在子类的第一行

在子类的内部中调用父类的方法和属性是通过super来实现的

当然, this关键词也是一样

调用自己构造器也是要放到第一行

但是this放在第一行的话,super就会报错

在这里插入图片描述

笔记

super注意点
    1.super调用父类的构造方法,必须在构造方法的第一个
    2.super 必须只能出现在子类的方法或者构造方法中!
    3.superthis 不能同时调用构造方法


    this:
    代表的对象不同:
    this:本身调用者这个对象
    super:代表父类对象的引用
    前提
    this:没有继承也可以使用
    super:只能在继承条件下才可以使用
    构造方法
    this();本类的构造
    super();父类的构造!
已标记关键词 清除标记
相关推荐
©️2020 CSDN 皮肤主题: 游动-白 设计师:白松林 返回首页