构造方法中的super关键字

在Java子类的构造方法中可以通过super关键字来调用父类的构造方法。其用法为:

1) super(); 访问父类中的无参构造函数

2) super (paras…); 访问父类中的成员函数yyy

super()来调用父类无参的构造方法,但即使不使用super(),默认也会调用父类无参的构造方法。父类无参的构造方法可以是自定义的无参构造方法,也可以是编译器自动生成的默认构造方法。但如果父类中定义了有参的构造方法,但没有定义无参的构造方法,这时编译器不会生成默认构造函数,也就不能通过super()来调用构造方法。此外,如果父类中定义了private的无参构造方法,也不同通过super()来调用。

super(paras…);用来调用父类中某个有参的构造方法。

super调用父类的构造方法,必须放在子类构造方法的第一行中执行。如果调用的有参的父类构造方法,在super的参数中不能用子类中的非static成员变量(可以使用static成员变量,因为static成员变量在构造方法执行前就已经初始化),也不能使用this或super的相关调用。例如super(super.getClass().getName());

在构造方法中也可以使用super关键字来访问父类中的成员变量和成员函数。其用法和非构造方法中的super关键字用法相同。

非构造方法中的super关键字

在Java子类中可以通过通过super关键字来调用父类中的成员变量和方法。其用法是。

1) super.xxx; 访问父类中的成员变量xxx

2) super.yyy(paras…); 访问父类中的成员函数yyy

super关键字访问父类的成员变量和成员函数时不能越过访问权限的控制,不能访问父类中private的成员变量和方法。例如:

class a {

private int mNum = 0;

}

class b extends a {

public void setNum(int i) {

super.mNum = i; //错误,不能访问父类的private成员

}

}

在有多层的继承关系时,super调用只能自身父类的成员变量和方法,不能越过父类直接调用父类的父类中的成员变量或方法。当然如果父类的父类中的成员变量或方法被父类继承,那么是可以通过super来调用该成员变量和方法的,但这时实际调用的是父类中的成员变量和方法。例如:

class a {

protected int mNum = 0;

public void setNum(int i) {

mNum = i;

}

}

class b extends a {

public void setNum(int i) {

mNum = i * i;

}

}

class c extends b {

public void setNum(int i) {

super.setNum(i); //调用的是b中的setNum()方法

super.super.setNum(i); //错误,不支持的用法

}

}

class a {

protected int mNum = 0;

public void setNum(int i) {

mNum = i;

}

}

class b extends a {

}

class c extends b {

public void setNum(int i) {

super.setNum(i); //正确,虽然b中没有实现setNum(),但b中继承了a的setNum()函数,

//c中调用super.setNum()调用的是b的setNum()函数,可以执行。

}

}

如有疑问请留言或者到本站社区交流讨论,感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

java super()方法_Java super关键字的使用方法详解相关推荐

  1. java中math的方法_Java中Math类常用方法代码详解

    近期用到四舍五入想到以前整理了一点,就顺便重新整理好经常见到的一些四舍五入,后续遇到常用也会直接在这篇文章更新... public class Demo{ public static void mai ...

  2. java函数式编程_Java 函数式编程和 lambda 表达式详解

    作者:DemonsI my.oschina.net/demons99/blog/2223079 为什么要使用函数式编程 函数式编程更多时候是一种编程的思维方式,是种方法论.函数式与命令式编程的区别主要 ...

  3. java动态代理_Java代理模式及动态代理详解

    Java的动态代理在实践中有着广泛的使用场景,比如最场景的Spring AOP.Java注解的获取.日志.用户鉴权等.本篇文章带大家了解一下代理模式.静态代理以及基于JDK原生动态代理. 代理模式 无 ...

  4. Java指令全集_Java的JVM字节码指令集详解

    本文详细介绍了如何使用javap查看java方法中的字节码.以及各种字节码的含义,并且配以完善的案例,一步步,从头到尾带领大家翻译javap的输出.在文末还附有JVM字节码指令集表. 本文不适合没有J ...

  5. java mod %区别_Java中 % 与Math.floorMod() 区别详解

    %为取余(rem),Math.floorMod()为取模(mod) 取余取模有什么区别呢? 对于整型数a,b来说,取模运算或者取余运算的方法都是: 1.求 整数商: c = a/b; 2.计算模或者余 ...

  6. java 静态 编译_Java中的动态和静态编译实例详解

    Java中的动态和静态编译实例详解 首先,我们来说说动态和静态编译的问题. Q: java和javascript有什么区别? 总结了一下:有以下几点吧: 1.首先从运行环境来说java代码是在JVM上 ...

  7. java serializable用法_JAVA序列化Serializable及Externalizable区别详解

    序列化简介 Java 的对象序列化将那些实现 Serializable 接口的对象转换成一个字节序列,并能在之后将这个字节序列完全恢复为原来的对象. 这就意味着 Java 对象在网络上的传输可以不依赖 ...

  8. java 分割数据_java 分割csv数据的实例详解

    java 分割csv数据的实例详解 实际需要解析的csv中很多都是从excel中转过来的,数据中本身包含了逗号的数据导致split的过程中发现数据对不上,因此,基于这种特性,重新写了一个csv数据的分 ...

  9. java 接口函数_Java函数式接口Supplier接口实例详解

    这篇文章主要介绍了Java函数式接口Supplier接口实例详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 JDK提供了大量常用的函数式接口以丰 ...

  10. java supplier接口_Java函数式接口Supplier接口实例详解

    这篇文章主要介绍了Java函数式接口Supplier接口实例详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 JDK提供了大量常用的函数式接口以丰 ...

最新文章

  1. 为什么说 Java 程序员到了必须掌握 Spring Boot 的时候?
  2. 最好用的货币:货币发展史和BCH
  3. 关于可扩展的web架构设计的探索-框架结构的描述文件
  4. 斯坦福大学深度学习与自然语言处理第一讲:引言
  5. mybatis的if test 条件判断
  6. 通过常用监控命令快速发现性能问题
  7. MFC工作笔记0003---WindowsAPI与MFC的关系
  8. PTA 5-10 Saving James Bond-Easy (25) - 图 - DFS
  9. PHP设计模式——装饰器模式
  10. linux NFS 配置步骤
  11. 凸优化第二章凸集 2.1 仿射集合和凸集
  12. Maven中的dependencyManagement 详解
  13. 网页设计中的中国传统色彩速查表 颜色值
  14. ppm\℃是什么意思/
  15. python编程自然数表达式_结对编程-python实现
  16. 10个常用的数据分析商业模型之漏斗模型(六)
  17. Win10启动文件夹在哪里,Win10怎么添加开机启动项?
  18. 人工智能时代,人类何去何从?
  19. Keras loss函数
  20. java4android网易云,Android仿网易云音乐播放界面

热门文章

  1. 详解.Net中变量的命名和属性
  2. Android Service的onStartCommand返回值用法
  3. 并发编程之 锁的优化有哪些
  4. Btrfs入门(一)
  5. 《Visual C# 2010入门经典》一导读
  6. React学习(6)—— 高阶应用:非受控组件
  7. js计算价格,保留小数
  8. 从网上搜索到的虚拟化笔记
  9. Singleton Pattern (单例模式)
  10. 26日上午网易等多家网站无法访问“剖析”