java中super的用法总结,下列选项中关于java中super关键字,Java中super关键字的用法和细节

java中super的用法总结,下列选项中关于java中super关键字,Java中super关键字的用法和细节

大家好,本文主要讲Java中super关键字的用法和细节。有兴趣的同学过来看看,如果对你有帮助记得收藏。

目录

前言1。超级关键字2的用法。超级关键字3的使用细节。super和this关键字的比较和总结

前言

因为Xi的疫情,我在宿舍呆了一个月。最近在复习前面学过的知识的时候,发现自己初学面向对象的时候对super关键字理解的不够深入,所以想重新学习一下Super关键字的用法和细节。

1. super关键字的用法

在Java中,super关键字有三种用法,即:

通过超级访问父类中的成员变量。属性名称。

通过超访问父类中的成员方法。方法名称(参数列表)

通过super(参数列表)访问父类的构造函数

调用父类的成员变量:

类别人员{

受保护的年龄;

}

班级学生拓展人{

public void func(){

int age=super.age//通过超级访问父类的成员变量。属性名

}

}

调用父类中的成员方法:

类别人员{

受保护的void func(){

}

}

班级学生拓展人{

public void func(){

super . func();//通过超调用父类的成员方法。方法名称

}

}

调用父类的构造函数:

类别人员{

字符串名称;

公共人物(字符串名称){

this.name=name

}

}

班级学生拓展人{

公共学生(字符串名称){

超级(名);//通过super(参数列表)调用父类的构造函数

}

}

注意:

子类不能通过super关键字访问父类中私有修饰的属性和方法,因为私有修饰的属性和方法只能在当前类内部访问。当父类的构造函数被子类的构造函数中的super关键字调用时,super关键字必须出现在构造函数的第一行,并且只能出现一次。

2. super关键字的使用细节

当我们在子类中寻找方法时,调用规则如下:

子类中有方法要调用的时候,直接调用就好了。如果子类中不存在该方法,则将向上搜索父类;如果方法存在于父类中,则调用父类中的方法;如果父类中不存在该方法,将向上搜索父类的父类,直到找到对象类。

提示:如果直到对象类才找到方法,会提示方法不存在,但是如果找到了方法但是你没有权限访问(比如方法被private修饰),会产生错误。

公共类测试扩展了Test2{

公共静态void main(String[] args) {

测试Test=new Test();

test . func 1();

}

公共void函数1(){

System.out.println(子类中的' func 1()');

func 2();

}

}

等级测试2{

公共void函数2(){

System.out.println(父类中的' func 2()');

}

}

//结果:

子类中的Func1()

父类中的Func2()

在上面的代码中,子类中的func1()方法在调用func2()方法时,会在子类中寻找func2()方法的存在,如果没有找到,会在父类中寻找func2()方法。

当我们把语句func2()放在func1()中;改为this . func 2();此时,语义没有改变,仍然会首先在子类中搜索它,如果没有找到,则在父类中搜索。

当我们把this . func 2();改为super . func 2();这个时候,语义发生了变化。如上所述,超级。方法名()调用父类中的方法,所以该语句不会检测当前类中是否存在func2()方法,只会依次检测其父类中是否存在。例如:

公共类测试扩展了Test2{

公共静态void main(String[] args) {

测试Test=new Test();

test . func 1();

}

公共void函数1(){

System.out.println(子类中的' func 1()');

super . func 2();//此处编译失败。

}

公共void函数2(){

system . out . println(word类中的' func 2()');

}

}

等级测试2{

public void func3(){

System.out.println(父类中的' func 3()');

}

}

//编译失败,说明Test2中的方法func2()无法解析。

注意:成员属性与成员方法相同。

我们已经知道,super关键字的访问不仅限于父类,甚至父类的父类,父类的父类,甚至更上一层,都可以通过super关键字访问。那么,如果同一个成员存在于子类之上的多个类中,此时使用super关键字访问哪个类成员呢?

当一个子类要访问一个上级类的成员,并且该子类的多个上级类都有这个成员时,我们就利用了super关键字的邻近原则,即访问super关键字找到的第一个成员。例如:

公共类测试扩展了Test2{

公共静态void main(String[] args) {

测试Test=new Test();

test . func 1();

}

公共void函数1(){

System.out.println(子类中的' func 1()');

super . func 2();//子类通过super关键字访问上级类中的func2()。

}

}

类Test2扩展了Test3{

公共void函数2(){

System.out.println(父类中的' func 2()');

}

}

等级测试3{

公共void函数2(){

System.out.println ('func2()'在父类的父类中);

}

}

//结果:

子类中的Func1()

父类中的Func2()

上面的代码中,子类通过super关键字访问上级类中的func2()方法,子类继承Test2,Test2继承Test3。此时,Test2和Test3中都有func2()。此时子类首先访问其父类Test2,Test2中有func2()方法,所以可以直接访问Test2中的func2()。如果Test2中没有func2(),那么它就是super。

3. super和this关键字的比较

下表列出了super关键字和this关键字之间的差异:

总结

关于Java super关键字的用法和细节的这篇文章就到这里了。关于Java super keyword的更多信息,请搜索我们以前的文章或继续浏览下面的相关文章。希望你以后能支持我们!

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: