super在构造函数中的运用
package example;
//在子类构造对象时,访问子类构造函数时候,父类也运行。
//原因是:在子类的构造函数中第一行有一个默认的隐式语句super();
/*
构造函数不能覆盖
子类的实例化过程:子类中所有的构造函数默认都不能访问父类中空参数的构造函数。
通过super();来调用。
为什么子类实例化的时候要访问父类中的构造函数呢?
是因为子类继承了父类,获取到了父类中的内容(属性),所以在使用父类内容之前,
要先看父类是如何对自己的内容进行初始化的。
所以子类在构造对象时,必须访问父类中的构造函数。
为了完成这个必须的动作,就在子类的构造函数中加入了super();语句。
如果父类中没有定义空参数构造函数,那么子类的构造函数必须用super明确要调用
父类中的哪个构造函数。
注意:super();语句必须要定义在子类构造函数的第一行。因为父类的初始化动作
要先完成。
*/
class Fu{
Fu(int x){
System.out.println("fu run");
}
}
class Zi extends Fu{
Zi(){
super(4);//调用的就是父类中的空参数的构造函数
System.out.println("zi run");
}
}
public class ExtendsDemo {
public static void main(String[] args) {
new Zi();
}
}
class Fu{
Fu(){
System.out.println("A fu run");
}
Fu(int x){
System.out.println("B fu run"+x);
}
}
class Zi extends Fu{
Zi(){
super();//调用的就是父类中的空参数的构造函数
System.out.println("Z zi run");
}
Zi(int x){
super(); //输出的是A和D
System.out.println("D Zi run"+x);
}
}
public class ExtendsDemo {
public static void main(String[] args) {
new Zi(6);
}
}
class Fu{
Fu(){
System.out.println("A fu run");
}
Fu(int x){
System.out.println("B fu run"+x);
}
}
class Zi extends Fu{
Zi(){
super();//调用的就是父类中的空参数的构造函数
System.out.println("Z zi run");
}
Zi(int x){
//super();
super(x);//输出的是B和D
System.out.println("D Zi run"+x);
}
}
public class ExtendsDemo {
public static void main(String[] args) {
new Zi(6);
}
}
super在构造函数中的运用的更多相关文章
- 为什么super()和this()调用语句不能同时在一个构造函数中出现的解释
我想这应该是Java构造函数的一种机制吧,首先以子类和父类为例.当你创建一个子类的实例时,首先会调用父类的构造函数,然后再调用子类的构造函数,如果父类中没有缺省构造函数,则必须再子类的构造函数中显示的 ...
- 构造函数中的super和this的使用
super用于调用父类构造函数的部分,其必须出现在构造函数的第一行.super在调用时第一件事就是去执行父类构造函数的部分,所执行的父类构造函数与super()括号中的参数相对应. this用于在一个 ...
- 关于构造函数中的this()和super()
今天看到一个这段代码 public DataSourcePool(String driver, String url, String user, String pwd) throws Exceptio ...
- Android中自定义样式与View的构造函数中的第三个参数defStyle的意义
零.序 一.自定义Style 二.在XML中为属性声明属性值 1. 在layout中定义属性 2. 设置Style 3. 通过Theme指定 三.在运行时获取属性值 1. View的第三个构造函数的第 ...
- 尝试解决在构造函数中同步调用Dns.GetHostAddressesAsync()引起的线程死锁
(最终采用的是方法4) 问题详情见:.NET Core中遇到奇怪的线程死锁问题:内存与线程数不停地增长 看看在 Linux 与 Windows 上发生线程死锁的后果. Linux: Microsoft ...
- C++构造函数中不能调用虚函数
在构造函数中调用虚函数,并不会产生多态的效果,就跟普通函数一样. c++ primer 第四版中497页15.4.5构造函数和析构中的虚函数讲到,如果在构造函数或析构函数中调用虚函数,则运行的是为构造 ...
- 关于在C#中构造函数中调用虚函数的问题
在C#中如果存在类的继承关系,应避免在构造函数中调用虚函数.这是由于C#的运行机制造成的,原因如下: 新建一个类实例时,C#会先初始化该类(对类变量赋值,并将函数记在函数表中),然后再初始化父类.构造 ...
- 创建 PDO 实例并在构造函数中设置错误模式
PDO 将只简单地设置错误码,可使用 PDO::errorCode() 和 PDO::errorInfo() 方法来检查语句和数据库对象.如果错误是由于对语句对象的调用而产生的,那么可以调用那个对象的 ...
- C++中默认构造函数中数据成员的初始化
构造函数的任务是初始化数据成员的,在类中,如果没有显示定义任何构造函数,编译器将为我们创建一个构造函数,称为合成的默认构造函数,合成的默认构造函数使用与变量初始化相同的规则来初始化成员.即当类中的数据 ...
随机推荐
- Kendo UI开发教程(9): Kendo UI Validator 概述
Kendo UI Validator 支持了客户端校验的便捷方法,它基于HTML 5 的表单校验功能,支持很多内置的校验规则,同时也提供了自定义规则的便捷方法. 完整的Kendo UI 的Valida ...
- 多线程计算----pthread
#include <stdio.h> #include <unistd.h> #include <stdlib.h> #include <pthread.h& ...
- struts2对ognl表达式的使用(配图解加讲解)
ognl它是一个功能强大的表达式语言,用来获取和设置Java对象的属性,它旨在提供一个更高的更抽象的层次来对Java对象图进行导航. 先看一张示意图 如果是下面的除了第一种valueStack的下面几 ...
- MySQL5.7解压版详细安装教程,在最后一步需要随机密码
这里为百度经验 http://jingyan.baidu.com/article/ff42efa93580c4c19e2202b6.html 然而在最后一步,回车不能够越过密码. 需要在解压的mysq ...
- express框架+jade+bootstrap+mysql开发用户注册登录项目
完整的项目代码(github):https://github.com/suqinhui/express-demo express是基于Node.js平台的web应用开发框架,用express框架开发w ...
- AndroidStudio引入so文件
项目中需要引入几个 so文件,但APP一直崩溃报错 java.lang.UnsatisfiedLinkError: Couldn't load ad from loader dalvik.system ...
- Linux环境下安装Redis步骤即问题解决
第一步:将安装包在window平台上解压后拷贝到Linux机器的/usr/soft目录下,并且为文件夹和文件赋予最高权限,chmod+x *: 第二步:进入到redis-3.2.6目录下,执行make ...
- 【01背包】HDU 1171 Big Event in HDU
Problem Description Nowadays, we all know that Computer College is the biggest department in HDU. Bu ...
- SpringMVC Memcached 搭建WEB项目缓存框架
最近做的项目一直在使用memcached作为缓存来缓存各种数据,现在BOSS要在项目上加上缓存.并把任务交给我.便琢磨怎么解决这个问题. 看了很多文章,写的比较详尽靠谱的就是这篇了http://www ...
- http://www.spasvo.com/ceshi/open/kyxncsgj/Jmeter/
http://www.spasvo.com/ceshi/open/kyxncsgj/Jmeter/