java super()方法_Java super关键字的使用方法详解
构造方法中的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关键字的使用方法详解相关推荐
- java中math的方法_Java中Math类常用方法代码详解
近期用到四舍五入想到以前整理了一点,就顺便重新整理好经常见到的一些四舍五入,后续遇到常用也会直接在这篇文章更新... public class Demo{ public static void mai ...
- java函数式编程_Java 函数式编程和 lambda 表达式详解
作者:DemonsI my.oschina.net/demons99/blog/2223079 为什么要使用函数式编程 函数式编程更多时候是一种编程的思维方式,是种方法论.函数式与命令式编程的区别主要 ...
- java动态代理_Java代理模式及动态代理详解
Java的动态代理在实践中有着广泛的使用场景,比如最场景的Spring AOP.Java注解的获取.日志.用户鉴权等.本篇文章带大家了解一下代理模式.静态代理以及基于JDK原生动态代理. 代理模式 无 ...
- Java指令全集_Java的JVM字节码指令集详解
本文详细介绍了如何使用javap查看java方法中的字节码.以及各种字节码的含义,并且配以完善的案例,一步步,从头到尾带领大家翻译javap的输出.在文末还附有JVM字节码指令集表. 本文不适合没有J ...
- java mod %区别_Java中 % 与Math.floorMod() 区别详解
%为取余(rem),Math.floorMod()为取模(mod) 取余取模有什么区别呢? 对于整型数a,b来说,取模运算或者取余运算的方法都是: 1.求 整数商: c = a/b; 2.计算模或者余 ...
- java 静态 编译_Java中的动态和静态编译实例详解
Java中的动态和静态编译实例详解 首先,我们来说说动态和静态编译的问题. Q: java和javascript有什么区别? 总结了一下:有以下几点吧: 1.首先从运行环境来说java代码是在JVM上 ...
- java serializable用法_JAVA序列化Serializable及Externalizable区别详解
序列化简介 Java 的对象序列化将那些实现 Serializable 接口的对象转换成一个字节序列,并能在之后将这个字节序列完全恢复为原来的对象. 这就意味着 Java 对象在网络上的传输可以不依赖 ...
- java 分割数据_java 分割csv数据的实例详解
java 分割csv数据的实例详解 实际需要解析的csv中很多都是从excel中转过来的,数据中本身包含了逗号的数据导致split的过程中发现数据对不上,因此,基于这种特性,重新写了一个csv数据的分 ...
- java 接口函数_Java函数式接口Supplier接口实例详解
这篇文章主要介绍了Java函数式接口Supplier接口实例详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 JDK提供了大量常用的函数式接口以丰 ...
- java supplier接口_Java函数式接口Supplier接口实例详解
这篇文章主要介绍了Java函数式接口Supplier接口实例详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 JDK提供了大量常用的函数式接口以丰 ...
最新文章
- 为什么说 Java 程序员到了必须掌握 Spring Boot 的时候?
- 最好用的货币:货币发展史和BCH
- 关于可扩展的web架构设计的探索-框架结构的描述文件
- 斯坦福大学深度学习与自然语言处理第一讲:引言
- mybatis的if test 条件判断
- 通过常用监控命令快速发现性能问题
- MFC工作笔记0003---WindowsAPI与MFC的关系
- PTA 5-10 Saving James Bond-Easy (25) - 图 - DFS
- PHP设计模式——装饰器模式
- linux NFS 配置步骤
- 凸优化第二章凸集 2.1 仿射集合和凸集
- Maven中的dependencyManagement 详解
- 网页设计中的中国传统色彩速查表 颜色值
- ppm\℃是什么意思/
- python编程自然数表达式_结对编程-python实现
- 10个常用的数据分析商业模型之漏斗模型(六)
- Win10启动文件夹在哪里,Win10怎么添加开机启动项?
- 人工智能时代,人类何去何从?
- Keras loss函数
- java4android网易云,Android仿网易云音乐播放界面