关于Super关键字的理解

简介: 深入理解Super关键字

@[TOC](学习目录

一.super使用场景

==在继承关系中,子类的无参构造器默认super()调用父类的==
==访问父类的属性和方法==
==调用父类构造器==

二.super用法

super代表父类的引用,它用于访问父类的属性,方法,构造器
建立在继承关系之上,依照访问修饰符遵循相应的访问规则
super大部分情况下是可以省略的,子类需要访问父类时,需要显式地写出来
1.super访问父类属性:

  public void hey(){
        this.name=super.name;   
        System.out.println(name);  //输出的是父类的属性
    }

通过一个小例子展示了通过super,访问并输出了父类的name属性
这里的name数据类型是引用类型,就相当于本类中name指向的是父类所对应的属性地址,达到访问父类属性的效果
2.super访问父类方法:

    public void hey(){
        //super可以调用父类的方法不能调用private方法
        super.test100();  //test100为父类中可访问的方法
        super.test200();
        super.test300();
    }

3.访问父类构造器:

  public Person(String name, int age,double score) {
        super(name, age);  //访问父类构造器
        this.score=score;   //子类属性由子类初始化
    }

三.super使用细节

①调用父类构造器可以让我们的分工更明确,因为父类属性是继承而来,所以由父类初始化,而子类中的属性可以由子类来初始化
②当出现特殊性情况,子类中有和父类中的成员方法/属性重名时,为了访问父类成员,必须通过super来指定,这就很大程度上体现了super的作用!例如:

public class Test001 {
    public static void main(String[] args) {
        Test test=new Test();
        test.hey();
    }
}
class Test0001{
    String name="22";
}
class Test extends Test0001{
    String name ="11";
    public void hey(){
        System.out.println(super.name);
    }
}

运行结果:

22

四.super越级访问

super的访问不仅仅局限于邻近的父类,也可以是爷爷类,曾祖父类...:
访问的规则遵循就近原则
有一组继承关系CC—>BB—>AA

例如

class AA{
    int a=888;
}
class BB extends AA{
    int b=88;
}
class CC extends BB{
public void getNum() {
        System.out.println(super.a);
    }
}
public class Test {
    public static void main(String[] args) {
        CC c=new CC();
        c.getNum();
    }
}

运行结果

888

”访问了他的爷爷类“
就近原则示意图:
在这里插入图片描述

五. super与this

this super
访问本类属性,没有就从父类查找 从父类开始查找属性
访问本类中的方法,没有就从父类查找 从父类开始查找方法
调用本类构造器,必须放在构造器首行 调用父类构造器,使用时放在首行
表示当前对象 用于子类访问父类对象
相关文章
|
8月前
|
SQL 数据库
父类坑
父类坑
32 0
|
12月前
|
C#
C#方法重写
C#方法重写
45 0
|
8月前
super关键字
super关键字用来访问父类内容,而this关键字用来访问本类内容。用法也有三种 1.在本类的成员方法中,访问本类的成员变量。 2.在本类的成员方法中,访问本类的另一个成员方法。 3.在本类的构造方法中,访问本类的另一个构造方法。 在第三种用法当中要注意: A.this(...)调用也必须是构造方法的第一个语句,唯一一个。 B.super和this两种构造调用,不能同时使用。
29 0
|
10月前
|
编译器 C++
C++中虚继承时的构造函数
在虚继承中,虚基类是由最终的派生类初始化的,换句话说,最终派生类的构造函数必须要调用虚基类的构造函数。对最终的派生类来说,虚基类是间接基类,而不是直接基类。这跟普通继承不同,在普通继承中,派生类构造函数中只能调用直接基类的构造函数,不能调用间接基类的。 下面我们以菱形继承为例来演示构造函数的调用: #include <iostream> using namespace std; //虚基类A class A{ public: A(int a); protected: int m_a; }; A:
66 1
|
12月前
|
程序员
为什么子类会调用父类无参的构造函数
为什么子类会调用父类无参的构造函数
|
12月前
|
Java 编译器
构造函数中为什么要用this关键字?
构造函数中为什么要用this关键字?
51 0
|
编译器
Super关键字详解
Super关键字详解
57 0
|
编译器 定位技术
在父类的构造函数中调用虚函数为什么不能实现多态
在父类的构造函数中调用虚函数为什么不能实现多态
84 0
|
JavaScript
6、this关键字
6、this关键字
73 0
6、this关键字
|
自然语言处理 JavaScript 前端开发
浅谈一下this关键字
浅谈一下this关键字
70 0
浅谈一下this关键字