构造函数,super()
一、构造函数的作用
- 创建类的对象,只有对象才能调用一个类中的方法和属性
二、在有继承关系的类中,创建子类对象,初始化的顺序
先父类构造 —>后子类构造
为什么父类构造会被调用?因为有继承关系,子类创建了对象会用到父类的属性方法,所以父类也要初始化,不然你继承父类而不用父类的属性和方法,那继承还有什么意义。
怎么调用父类构造的?在子类构造方法第一行默认调用super(),这意思就是调用父类的空参数构造函数,super()你加了系统不加,你不加系统默认有一个
三、空参数构造函数必须有(关键)
+在一个类中,肯定会有构造函数,而且肯定会有空参构造函数,总的来说就是,1、只有空参构造 2、空参构造以及其他重载的多个有参构造
- 如果你没写任何构造,系统默认添加空参构造,如果你写了有参构造,那么你必须把那个空参构造也显示的添加上
四、this() super()
+ this()调用的是本类中的空参构造,本类空参构造中其实也隐含super(),所以也会调用到父类空参构造:有参构造—this()—本类无参构造—spuer()—父类无参构造—父类被初始化
super() 调用父类空参数构造方法,
super(参数一,参数二,….),调用父类指定参数个数的构造函数
五、什么时候必须在构造函数里面调用super(参数)
- 如果你创建子类对象 同时想调用父类非空参数的构造函数,那么就得在第一行加上super(参数个数):这种情况一般没什么意义
六:综合来说:我的理解
super()不加,系统默认会加上,super()的作用就是调用父类空参数构造,初始化父类,初始化了父类,子类才能通过创建的子类对象调用父类的属性和方法,这就是super()的意义。
class A {
public A(){
System.out.println("父类无参构造");
}
public A(String a){
//这里默认调用空参构造,所以必须定义空参构造
System.out.println("父类有参构造");
}
}
class B extends A{
B(){
System.out.println("子类无参构造");
}
public B(String a){
this();
System.out.println("子类有参构造");
}
}
public class test {
public static void main(String[] args) {
// A a1=new A();
// A a2=new A("啦啦啦");
//B b1 = new B();
B b2 = new B("呃呃呃");
}
}
构造函数,super()的更多相关文章
- JavaScript学习笔记(散)——继承、构造函数super
构造函数中的super 今天看<JavaScript设计模式与开发实践>时,在书中看到一段代码出现super语句,第一次看到这个关键字,所以上网查了下它的作用,发现这个关键字是来自java ...
- java中的this和super的作用和异同和C++中调用父类的构造函数
来源于:http://www.cnblogs.com/hasse/p/5023392.html 这几天看到类在继承时会用到this和super,这里就做了一点总结,与各位共同交流,有错误请各位指正~ ...
- 面向对象、类与对象、成员与局部变量、封装、private、构造函数、this、static、extends、super、final、abstract、interface、多态、内部类、异常【5】
若有不正之处,请多多谅解并欢迎批评指正,不甚感激. 请尊重作者劳动成果: 本文原创作者:pipi-changing本文原创出处:http://www.cnblogs.com/pipi-changing ...
- 继承:继承后子类构造函数具有隐式super,所以子类中所以的构造函数默认会访问父类中的空参数的构造函数
class Test { Test(){ System.out.println("Test"); } Test(String name){ System.out.println(& ...
- java构造函数是否可继承,以及子类构造函数可否不使用super调用超类构造函数
问题一:java的构造函数能否被继承? 笔者初学java看的一本书说:“java的子类自然的继承其超类的“非private成员”. 通常java的构造函数被设置为public的(若你不写构造函数,ja ...
- 继承、多态——成员变量、成员函数、构造函数(this、super)
继承 1.继承使用原因: 1.提高了代码的复用性 2.让类与类之间产生了关系,有了这个关系,才有了多态的特性 2.继承注意事项: 千万不要为了获取其他类的功能,简化代码而继承. 必须是类与类之间有所属 ...
- 为什么java构造函数的构造器只能在第一行写this() 或者super() ?
最近在看内部类, 但是被“为什么匿名内部类或者局部内部类使用方法的局部变量时, 局部变量一定得是final类型”困扰着, 在网上查找资料的时候, 发现我对类初始化完全不了解, 之前的认识都是错误! 所 ...
- ES6中构造函数内super关键字的使用
super关键字用于访问和调用一个对象的父对象上的函数. super.prop和super[expr]表达式在类和对象字面量任何方法定义中都是有效的. 语法 super([arguments]); / ...
- 错误:Implicit super constructor xx() is undefined for default constructor. Must define an explicit constructor
错误:Implicit super constructor xx() is undefined for default constructor. Must define an explicit con ...
随机推荐
- 字符串cookies转字典 scrapy使用。
配置文件 DOWNLOADER_MIDDLEWARES = { 'weibo.middlewares.CookiesMiddleware': 543, } 中间件内容 class CookiesMid ...
- jdk8系列三、jdk8之stream原理及流创建、排序、转换等处理
一.为什么需要 Stream Stream 作为 Java 8 的一大亮点,它与 java.io 包里的 InputStream 和 OutputStream 是完全不同的概念.它也不同于 StAX ...
- Linux 查看CPU信息,机器型号,内存等信息
- activiti报错ProcessEngines.getDefaultProcessEngine()为null
activiti报错ProcessEngines.getDefaultProcessEngine()为null 文件名错误,默认加载classpath下面的activiti.cfg.xml,而不是ac ...
- Initialization of bean failed; nested exception is java.lang.IllegalArgumentException: error at ::0 inconsistent binding
1.发生原因 springAOP 里面绑定参数出现错误 核对绑定参数的名称 核对 springAOP的版本 2.aop切面表达式写的有误
- 前端工程化-webpack篇之babel-polyfill与babel-runtime(三)
关于 Babel 如果我们没有配置一些规则,Babel 默认只转换新的 JavaScript 句法(syntax),而不转换新的 API,比如 Iterator.Generator.Set.Maps. ...
- Python 3 官方文档学习(1)
本文系官方文档翻译之作,不当之处,敬请原谅! range()函数 如果需要遍历一个数字序列,可以使用内置的range函数.该函数会生成等差序列. 1 2 3 range(5)# 范围[0, 5) ra ...
- JQuery中jsCharts图表插件(十)
一:1.jsCharts图表插件 注意:从官方下来的例子都没指定页面编码,在这种情况下,浏览器就会使用默认设置中文编码:GB2312,GBK等:导致无法执行. 请在html代码中的<head&g ...
- Storm(三)Storm的原理机制
一.Storm的数据分发策略 1. Shuffle Grouping 随机分组,随机派发stream里面的tuple,保证每个bolt task接收到的tuple数目大致相同. 轮询,平均分配 2. ...
- poj 2155(未完成)
线段树套线段树模板题 链接:http://poj.org/problem?id=2155 题解: 代码: #include <bits/stdc++.h> using namespace ...