目录

1.super()的使用实例 一一一子类重写父类的方法

2.super()的使用实例 一一一子类重写父类的变量

3.super()的使用实例 一一一在子类的构造方法中

4.关于构造方法中super()

第一种情况:编译不通过

第二种情况:编译不通过

第三种情况:成功编译通过


1.super()的使用实例 一一一子类重写父类的方法

public class A {private String nameA="A";public void getName() {System.out.println("父类"+nameA);}public static void main(String[] args) {}}public class B extends A{private String nameB="B";@Overridepublic void getName() {System.out.println("子类"+nameB);super.getName();}public static void main(String[] args) {B b=new B();b.getName();}
}

运行结果:

结果分析:

在子类B中,我们重写了父类的getName方法,如果在重写的getName方法中我们去调用了父类的相同方法,必须要通过super关键字显示的指明出来。

如果不明确出来,按照子类优先的原则,相当于还是再调用重写的getName()方法,此时就形成了死循环,执行后会报java.lang.StackOverflowError异常。如下图所示:

2.super()的使用实例 一一一子类重写父类的变量

public class A {String nameA="A";}public class B extends A{String nameA="B";public void getName() {System.out.println("子类"+nameA);System.out.println("父类"+super.nameA);}public static void main(String[] args) {B b=new B();b.getName();}
}

运行结果:

此时子类B中有一个和父类一样的字段(也可以说成父类字段被隐藏了),为了获得父类的这个字段我们就必须加上super,如果没有加,直接写成name = name;不会报错,只是会警告,表示此条语句没有任何意义,因为此时都是访问的子类B里面的那么字段。

我们通过super是不能访问父类private修饰的变量和方法的,因为这个只属于父类的内部成员,一个对象是不能访问它的private成员的。

3.super()的使用实例 一一一在子类的构造方法中

编译器会自动在子类构造函数的第一句加上 super(); 来调用父类的无参构造器;此时可以省略不写。如果想写上的话必须在子类构造函数的第一句,可以通过super来调用父类其他重载的构造方法,只要相应的把参数传过去就好。

因此,super的作用主要在下面三种情况下:

1、调用父类被子类重写的方法;

2、调用父类被子类重定义的字段(被隐藏的成员变量);

3、调用父类的构造方法;

其他情况,由于子类自动继承了父类相应属性方法,关键字super可以不显示写出来。

4.关于构造方法中super()

第一种情况:编译不通过

分析:

如果一个类中没有写任何的构造方法,JVM会生成一个默认的无参构造方法。在继承关系中,由于在子类的构造方法中,第一条语句默认为调用父类的无参构造方法(即默认为super(),一般这句话省略了)。所以当在父类中定义了有参构造函数,都是没有定义无参构造函数时,IDE会强制要求我们定义一个相同参数类型的构造器。

在本例中JVM默认给B加了一个无参构造方法,而在这个方法中默认调用了super(),但是父类中并不存在该构造方法

第二种情况:编译不通过

同样编译错误,相同的道理,虽然我们在子类中自己定义了一个构造方法,但是在这个构造方法中还是默认调用了super(),但是父类中并不存在该构造方法

第三种情况:成功编译通过

public class A {public A(String s) {}}public class B extends A{public B(String s) {super(s);}
}

分析:

所以,只要记住,在子类的构造方法中,只要里面没有显示的通过super去调用父类相应的构造方法,默认都是调用super(),即无参构造方法,因此要确保父类有相应的构造方法。

欢迎大家访问我的公众号,一起来学习成长:

Java中super()的使用相关推荐

  1. java里面super(),Java中super

    Java中super 1. super代表父类?代表父类的对象?还是代表父类的引用?为什么super()在构造方法,super.fun()在方法能用?个人认为应该是super表示对象才能这么调用,可父 ...

  2. java中super的三种用法

    java中super的用法 super只在子类中出现 super有三种用法 [1] super.xxx; xxx可以是类的属性. 例如super.name;即从子类中获取父类name属性的值 [2] ...

  3. Java中super关键字及super()的使用

    Java中super关键字及super()的使用: 1.super的使用: (1)super是一个关键字. (2)super和this很类似,我们对比着学习. 2.先复习一下this关键字的使用. ( ...

  4. Java中super详解

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

  5. Java中super关键字详解

    Java中super关键字详解 super有什么用? super什么时候不可以省略呢? super在内存图中是如何存在的呢? super使用时的注意事项 super有什么用? (1)当子类中构造方法第 ...

  6. Java中super方法的使用

    Java中super方法的使用 super关键字: (1)super能出现在实例方法和构造方法中. (2)super的语法是"super."和"super()" ...

  7. java中super的用法

    java中super的用法 super只在子类中出现 super有三种用法 [1] super.xxx; xxx可以是类的属性. 例如super.name;即从子类中获取父类name属性的值 [2]  ...

  8. Java中super关键字及其作用

    Java中super关键字及其作用 super关键字及其作用 A:super关键字指代父类对象引用(super代表父类存储空间的标识) B:作用: a:访问被子类隐藏的父类同名成员变量和成员方法 : ...

  9. java中super用来定义父类,Java中super的几种用法及与this的区别

    综观目前的 Web 应用,多数应用都具备任务调度的功能.本文由浅入深介绍了几种任务调度的 Java 实现方法,包括 Timer,Scheduler, Quartz 以及 JCron Tab,并对其优缺 ...

  10. java中super关键字_java中super关键字有什么用法

    Java中在执行子类的构造方法之前或者子类没有明确指定构造方法,会自动调用父类的无参构造方法. (视频教程推荐:java课程) super的三种使用情况: 访问父类方法中被覆盖的方法. 调用父类构造方 ...

最新文章

  1. 构建深度学习框架运行平台
  2. css3选项卡样式,css3选项卡标题样式设计1
  3. 使用NeMo快速完成NLP中的信息抽取任务,英伟达专家实战讲解,内附代码
  4. STM32上使用JSON
  5. C ++ 类 | 构造函数w参数_6
  6. 2000条你应知的WPF小姿势 基础篇57-62 依赖属性进阶
  7. Echarts教程_1-2 简介
  8. 基于 Vue3 的颜色选择器
  9. UVA 10451 Ancient Village Sports UVA 11909 Soya Milk UVA 11152 Colourful Flowers
  10. 16、git删除暂存区文件
  11. 神经网络训练算法的调用,人工神经网络训练案例
  12. 前序+中序 =〉后序
  13. 9款最佳项目集管理工具
  14. 几种常见的开源软件许可协议(GPL, LGPL, Apache License, BSD)
  15. 18对个人财富的窥视——对一款手机木马的解读及分析
  16. 散转程序c语言,单片机 散转程序设计 软件实验
  17. javascript停止页面所有计时器
  18. 达尔优键盘Mac Command-c和Command-v复制粘贴快捷键失效问题解决方案
  19. 一种无需调查船上坞的调查设备安装测量方法和安装测量系统
  20. python里面title_python中title=(.*?)是什么意思

热门文章

  1. 晶体管是什么,它的作用有哪些
  2. 浅谈电源芯片选型之低功耗
  3. flink 入门(一)
  4. 一个简单的基于形态学处理的报纸图像版面分割算法matlab仿真
  5. 从50亿图文中提取中文跨模态新基准Zero,奇虎360全新预训练框架超越多项SOTA
  6. 千兆网卡和普通网卡有什么区别?如何判断?
  7. 将塑造未来世界的十大web3技术
  8. 国六排放法规下的重型车车载终端的革新
  9. 全鲸董事长韩耀宁受邀出席第十九届中国科学家论坛,发表重要演讲
  10. 2009年6月12日,博客再次改进的公告!