关于Java中super的应用

article/2025/8/15 14:04:00

    super( )的用法

            大白话解释一下super( ) : super( )其实就相当于一个指向基类的指针,(Java中没有指针,但是可以这样理解)。至于用法有一下三种形式:

                    1. super.XXX( 这里的XXX指的是父类的成员变量名即父类的属性,或者对象名)

                    2. super.XXX( ) ( 这里的XXX是父类中的其中一个方法名)

                    3. super( ) ( 这种形式指的是:调用父类没有参数的构造方法(也叫构造函数)注意: 这里super( ) 只能放在子类的构造方法里面,并且只能放在构造方法的首句)

                    4. super( x,y,z...) (此形式指:调用父类有参数的构造方法,也必须放在子类的构造方法(成员方法不可以)里面,并且只能放在构造方法的首句。其中x,y,z是指的与父类此有参构造方法中参数数据类型相对应的子类中的参数


    以上就是super( )的四种应用形式,具体的应用看以下代码:

             1. super的第一种应用形式即调用父类的成员变量

package com.test;public class Father {protected String head = "我的头又圆又大";Father(){	System.out.println(head);}Father(int a){System.out.println(a);}
}
package com.test;public class Son extends Father{private static int a = 1;public Son(){//super.head = " ";System.out.println(super.head);//调用父类Father中的属性head并且输出System.out.println(head);//调用父类Father中的属性head并且输出//super();//super(a);}public void test(){//super(int a);//super.head = "abc";//System.out.println(head);}public static void main(String[] args) {Son s = new Son();//s.test();}
}

以上代码的输出结果是:



可见:两条输出语句在控制台的输出结果相同,所以它们的作用是一样的。head就和super.head等价。但是平时为了方便不会把super.加上去。(这里的super.XXX和属性的访问修饰符不会发生冲突,也就是说父类的私有变量只能通过父类定义好的调用私有属性的方法去调用和改变,super关键字也无权调用

                 2. super的第二种应用形式即利用super关键字调用父类的无参构造方法

package com.test;public class Father {public String head = "我的头又圆又大";Father(){System.out.println(head);}Father(int a){System.out.println(a);}
} 
package com.test;public class Son extends Father{private static int a = 1;public Son(){//super.head = " ";//System.out.println(super.head);//调用父类Father中的属性head并且输出//System.out.println(head);//调用父类Father中的属性head并且输出//super();//super(a);}public void test(){//super(int a);//super.head = "abc";//System.out.println(head);}public static void main(String[] args) {Son s = new Son();//s.test();}
}

其运行结果:

为什么在Son这个类中并没有一条输出语句,但是还是输出了一句话?就是因为用new关键字去创建对象的时候,会去调用此类的构造方法,而在此构造方法中的第一句,就默认为是:super( ),也就是去调用了父类的无参构造方法 这一句代码是自动加上去的,哪怕自己不在第一行写上:super( ),就像写一个类,如果不写这个类的构造方法的话,会自动加上一个public void修饰的,并且方法体为空的方法一样,当然自己加上也是可以的,但是加的时候必须要在子类构造方法的第一句。

               3. super的第三种应用形式利用super关键字调用父类的有参构造方法

package com.test;public class Father {public String head = "我的头又圆又大";Father() {System.out.println(head);}Father(int a) {if (a == 1) {System.out.println("你们给我的参数是1");}if (a == 2) {System.out.println("你们给我的参数是2");}}Father(String str) {System.out.println("儿子,儿子~我是你爸爸");}
}
package com.test;public class Son extends Father {private static int a = 1;private static String str = "ZwZ";public Son() {// System.out.println(super.head);//调用父类Father中的属性head并且输出// System.out.println(head);//调用父类Father中的属性head并且输出// super();super(a);//调用父类的,有参数的,并且参数为int类型的构造方法//super(str);}public Son(String str){super(str);//调用父类的,有参数的,并且参数为String类型的构造方法}public void test() {// super(int a);// super.head = "abc";// System.out.println(head);}public static void main(String[] args) {Son s = new Son();Son s2 = new Son(str);// s.test();}
}

其运行结果为:

可见super( )和super(str)分别调用了父类的Father( )和Father( String str )两个构造方法

                        4. super的第四种应用形式利用super关键字调用父类的成员方法

package com.test;public class Father {public String head = "我的头又圆又大";Father() {System.out.println(head);}Father(int a) {if (a == 1) {System.out.println("你们给我的参数是1");}if (a == 2) {System.out.println("你们给我的参数是2");}}Father(String str) {System.out.println("儿子,儿子~我是你爸爸");}public static String demo(String str) {System.out.println(str);return str;}
}
package com.test;public class Son extends Father {private static int a = 1;private static String str = "我叫张文哲";/** public Son() { System.out.println(super.head);//调用父类Father中的属性head并且输出* System.out.println(head);//调用父类Father中的属性head并且输出 super();* super(a);//调用父类的,有参数的,并且参数为int类型的构造方法 }*/public Son(String str) {// super(str);//调用父类的,有参数的,并且参数为String类型的构造方法String strCopy = super.demo(str);// 调用父类的成员方法demo,并且用strCopy接收此方法返回的字符串System.out.println(strCopy);// 输出strCopy接收的内容以验证}public static void main(String[] args) {// Son s = new Son();Son s2 = new Son(str);}
}

以上代码的输出结果:

又以上结果可知,理论与实践相符!!!(其中“我的头又大又圆”这句话之所以输出,是因为在Son(String str)此构造方法里面自动加上了super()而在Father( )里面有向控制台输出的语句。)


#注意#:

     1. 在子类的构造方法里面,super( )和super( x,y,z...)这能用其中一个,(其他两种没有这种要求),否则编译器会报错

     2.看到最后的同志们,可能都是比较爱学习或者对编程感兴趣的同道中人。那么送君一句话:拒绝眼高手低,拒绝唱高调,拒绝装逼,拒绝浮躁,拒绝自以为是。人外有人,天外有天微笑

       3.在构造子类对象的同时,会构造父类对象。(因为在调用自类构造方法的时候,第一句代码默认的便是super(),它调用了父类的构造方法)





                                        










http://chatgpt.dhexx.cn/article/AR4xahw0.shtml

相关文章

java中super的用法

java中super的用法 super只在子类中出现super有三种用法 【1】 super.xxx; xxx可以是类的属性。例如super.name;即从子类中获取父类name属性的值 【2】 super.xxx(); xxx()可以是类中的方法名。super.xxx();的意义是直接访问父类中的xxx()方法并调用 【3】 super(); 此方法意…

Java关键字:super

文章目录 一、super关键字的使用二、子类对象实例化的全过程三、Eclipse的debug调试 一、super关键字的使用 1、super理解为:父类的…… 2、super可以用来调用:属性、方法、构造器 3、super的使用:调用属性或方法 重写只是对父类中的方法&am…

Java关键字super解释

目录 前言(废话文学)前言(定义)super()之构造方法super()之成员函数super()之成员变量结束语 前言(废话文学) 又是看了一大堆文字介绍,非常系统和官方,理解要费半天劲,所…

Java中super详解

目录 Java中super详解 super的作用: 1. 通过super可以访问父类的构造方法 2. 通过super可以访问父类的属性(非私有) 3. 通过super可以访问父类的方法(非私有的方法) Java中super详解 在说super之前…

网络安全工程师零基础入门:(企业级)从入门到精通学习路线规划,学完即可就业

前言 最近总能在网上看到很多诸如:“怎样成为网络信息安全工程师”等相关问题,这可能与近几年网络安全事件频发,国家对于互联网信息安全和互联网舆情的重视程度不断提升有关,似乎网络信息安全工程师随之成为炙手可热的职业。 很…

网络安全工程师需要学哪些内容?零基础如何从入门到精通,看完这一篇就够了

网络安全工程师需要学习哪些内容? 作为一名网络安全工程师,需要学习以下内容: 计算机网络和操作系统:网络安全工程师需要了解计算机网络和操作系统的基础知识,以便理解网络安全的基础原理。 网络协议和技术&#xff…

论零基础自学web安全如何成为一名网络安全工程师

学前感言: 1.这是一条坚持的道路,三分钟的热情可以放弃往下看了. 2.多练多想,不要离开了教程什么都不会了.最好看完教程自己独立完成技术方面的开发. 3.有时多google,baidu,我们往往都遇不到好心的大神,谁会无聊天天给你做解答. 4.遇到实在搞不懂的,可以先放放,以后再来解决. …

网络安全工程师必备的七大技能

网络安全有多重要 网络安全非常重要,因为在现代社会中,人们日常生活中的很多方面都与网络有关。随着互联网和数字技术的不断发展,人们已经变得越来越依赖网络,网络已经成为了商业、金融、通信、交通、能源、医疗、教育等各个领域…

自学黑客(网络安全),一般人我劝你还是算了吧

一、自学网络安全学习的误区和陷阱 1.不要试图先成为一名程序员(以编程为基础的学习)再开始学习 我在之前的回答中,我都一再强调不要以编程为基础再开始学习网络安全,一般来说,学习编程不但学习周期长,而…

自学网安十余载,如何成为一名网络安全工程师?

前言 说实话,直到现在,我都认为绝大多数看我这篇文章的读者最后终究会放弃,原因很简单,自学终究是一种适合于极少数人的学习方法,学习进度非常非常慢,在这个过程中的变数过大,稍有不慎&#xf…

成为一名网络安全工程师,你应该学习什么?

前言 这是我的建议如何成为网络安全工程师,你应该按照下面顺序学习。 简要说明 第一件事你应该学习如何编程,我建议首先学python,然后是java。 (非必须)接下来学习一些算法和数据结构是很有帮助的,它将帮…

零基础自学网络安全?劝你还是别做梦了,你可能不知道这行门槛有多高...

前言 作为一名5年网安工程师老菜鸟来说,我实在想不通,开发岗位那么多,为什么要来学网安? 在这里必须给那些准备入坑的同学泼几盆冷水!零基础自学网络安全?劝你还是别做梦了! 待遇 我想不管什么工作&am…

网络安全自学能学会吗?网络安全如何学习

网络安全是近年来的热门工作,吸引了许多小伙伴开始学习网络安全知识。那么我们应该如何学习网络安全呢?这是一个很多人都在考虑的问题。网络安全可以自学吗?自学网络安全能不能学会? 无论什么知识都是自学的,只是说每…

入门网络安全工程师要学什么

根据最新版网络安全产业人才发展报告发布的信息得到的结论: 1、疫情常态化后,国内经济回温,网络安全人才需求增长,2021年上半年需求就较去年增长39.87%,平均薪酬较往年提高4.85%。 2、网络安全工程师从业趋势年轻化&a…

网络安全系统教程+渗透测试+学习路线(自学笔记)

一、什么是网络安全 网络安全可以基于攻击和防御视角来分类,我们经常听到的 “红队”、“渗透测试” 等就是研究攻击技术,而“蓝队”、“安全运营”、“安全运维”则研究防御技术。 无论网络、Web、移动、桌面、云等哪个领域,都有攻与防两面性…

网络安全工程师自学教程2023年最新版

什么是黑客? 你以为的黑客是这样的: 黑客帝国 实际上,黑客可能是街边炒粉的大叔、穿着格子衫的路人甲、一位体重再增加就得买3人座的“小胖” 著名黑客Richard Stallman 黑客是一类掌握超高计算机技术的人群。凭着掌握的知识,他…

网络安全工程师自学教程,从零基础到精通2023年最新版,想入坑的收藏这一篇就够了,全程无尿点

前言 网络安全非常重要,因为随着互联网的普及和应用的广泛,网络攻击的威胁也越来越大,如果不重视网络安全,可能会导致个人隐私泄露、财产损失、国家安全受到威胁等问题。因此,保障网络安全对于个人和社会都非常重要。…

网络安全工程师一般都是自学的吗?

前言 谈起黑客,可能各位都会想到:盗号,其实也不尽然;黑客是一群喜爱研究技术的群体,在黑客圈中,一般分为三大圈:娱乐圈 技术圈 职业圈。 娱乐圈:主要是初中生和高中生较多&#xf…

网络安全(黑客)自学

黑客,对很多人来说充满诱惑力。很多人可以发现这门领域如同任何一门领域,越深入越敬畏! 学前感言: 1.这是一条坚持的道路,三分钟的热情可以放弃往下看了. 2.多练多想,不要离开了教程什么都不会了.最好看完教程自己独立完成技术方面的开发 3.有…

零基础如何自学成为网络安全工程师

前言 一份网络攻防渗透测试的学习路线,不藏私了! 👉 【一帮助安全学习一】👈这里自取256G网络安全自学资料 1、学习编程语言(phpmysqljshtml) 原因: phpmysql可以帮助你快速的理解B/S架构是怎样运行的&#xff0c…