super关键字的用法源自于Java的三大特性之一的继承。也就是说有了继承,才有了super关键字。
super的英文基本意思是“超”。在Java中也是这么理解的,super代表的就是超类的意思。而我们习惯
上把超类叫做父类。
super主要有两种用法。
一是:调用父类构造方法
二是:调用父类的属性和一般方法
下面简单的对两种用法进行介绍
====================================================================分割线
一、调用父类的构造方法
就像上面说的,先有继承,再有super关键字的使用。所以在下面的代码中,进行了一个简单
的类的继承。
而关于调用父类的构造方法,下面说两种情况。一种是隐式调用父类无参构造方法,一种是显示
调用父类的任意构造方法。
注意一点:必须在子类的构造方法中对父类的构造方法进行调用,不能在子类的其他方法中;
注意二点:调用父类的构造方法的代码,必须写在子类构造方法的第一行。
-------------------------------------------------------------------------------------------------------------小分割线
第一种情况:隐式调用父类的无参构造方法
所谓的隐式,就是不将调用过程写出来。也就是说,我什么也不写,程序会默认的去调用父类的
无参构造方法。
第二种情况:显式调用父类的任何参构造方法
既然是显式的调用,那么就必须将代码写明白。
Java中通过下面两种写法去显式的调用父类的构造方法:
super();// 显式调用父类无参构造方法
super(参数1, 参数2, ...)// 显示调用父类带参构造方法
====================================================================分割线
二:调用父类的属性和一般方法
这里说的是调用父类的属性和一般方法,但是为什么要调用呢。当子类继承了父类,那么就会
继承其属性和方法。既然已经继承了,那就可以直接用,为什么反而要去调用父类的呢。
这就涉及到了一个覆写的概念了。所谓的覆写,指的是,子类将父类的属性或者方法重新定义
了一次。属性的名字类型都一样;方法的名字,参数,返回值类型,访问权限(最好相同)都一样,
只是方法体不同。
那么,问题来了。
1、当我在子类中对覆写的属性或者方法进行调用的时候,调用的到底是父类的属性和方法还
是子类中覆写的?
2、如果我不想调用子类中覆写的方法和属性,想调用的是父类中原来的方法和属性,那么该怎么
调用?
以下就是问题的回答:
1、调用的是子类中覆写的
2、Java中通过下面的方式来调用父类的属性,或者一般方法:
super.属性; // 调用父类的属性
super.方法();//调用父类的方法
====================================================================分割线
1、
super关键和this作用类似,使被屏蔽的成员变量或者成员方法或变为可见,或者说用来引用被
屏蔽的成员变量和成员成员方法。
不过super是用在子类中,目的是访问直接父类中被屏蔽的成员,注意是直接父类(就是类之上最
近的超类)。(注:这里所说的被屏蔽的,就是在子类中被覆写的属性和方法)
-----------------------------------------------------------------------------------------------------------------小分割线
2、
第一、在子类构造方法中要调用父类的构造方法,用“super(参数列表)”的方式调用,参数不是
必须的。同时还要注意的一点是:“super(参数列表)”这条语句只能用在子类构造方法体中的第一行。
第二、当子类方法中的局部变量或者子类的成员变量与父类成员变量同名时,也就是子类局部变
量覆盖父类成员变量时,用“super.成员变量名”来引用父类成员变量。当然,如果父类的成员
变量没有被覆盖,也可以用“super.成员变量名”来引用父类成员变量,不过这是不必要的。
第三、当子类的成员方法覆盖了父类的成员方法时,也就是子类和父类有完全相同的方法定义(
但方法体可以不同),此时,用“super.方法名(参数列表)”的方式访问父类的方法。
-----------------------------------------------------------------------------------------------------------------小分割线
3、
子类的构造函数如果要引用super的话,必须把super放在函数的首位
在Java中,有时还会遇到子类中的成员变量或方法与父类(有时也称父类)中的成员变量或方法
同名。因为子类中的成员变量或方法名优先级高,所以子类中的同名成员变量或方法就隐藏了父
类的成员变量或方法,但是我们如果想要使用父类中的这个成员变量或方法,就需要用到super.
-----------------------------------------------------------------------------------------------------------------小分割线
4、
调用父类的构造方法
操作被隐藏的成员变量和被覆盖的成员方法
-----------------------------------------------------------------------------------------------------------------小分割线
5、
super 在子类引用父类的属性或者方法的时候使用;
super 是相对于继承而言的;
super 代表的是当前类的父类,相似的,this 是代表当前类。
====================================================================分割线
以上就是关于super关键字的用法简介。