构造函数和clone以及在继承中
构造函数
类实例的构造创建过程是:
1.属性域被初始化为默认值(0,false,null)
2.按照在类声明的顺序初始化初始化语句和初始化块.
3.执行构造函数
所以,一个默认的空的无参构造函数并没有初始化类的实例域.因为实例域先于构造而初始化完毕了.- 构造函数无法被继承
- 如果一个类没有定义构造函数,编译器会自动创建一个,如下:
public class A(){}
也就是说自己定义一个无参无实现的构造函数和不写构造函数没有区别
- 继承的子类的无参构造函数会自动调用父类的无参构造函数.
- 子类的构造函数总是需要调用父类的构造函数.实际上无参的构造函数,如果没有显式调用父类构造函数,编译器就会自动调用super(),如下:
public class A(){
super(); //编译器自动添加
}
- 在构造函数中super(),或者this() 总是第一个执行(当然,super()和this() 不能共存于一个构造函数内).这是因为方法是在栈中调用执行的的,后调用的会先完成.
public class A(){
i=1; //这个是错误的,编译不能通过
super(); //手动添加的
}
克隆clone
在子类实现覆盖父类的clone() 方法时需要调用super();如:
@Override public Object clone() throws CloneNotSupportedException { return super.clone(); }
为什么调用父类的clone() 就可以实现创建一个一样状态的新对象呢?
是因为Object.clone() 方法有一个默认实现:Creates and returns a copy of this object. The precise meaning of "copy" may depend on the class of the object. --jdk1.7
意思是: 哪个对象调用了这个方法就创建和返回这个对象的一份复制.
- 深拷贝:
public class Body implements Cloneable{ public Head head; public Body() {} public Body(Head head) {this.head = head;} @Override public Object clone() throws CloneNotSupportedException { Body newBody = (Body) super.clone(); newBody.head = (Head) head.clone(); //深拷贝return newBody; } }
转载于:https://www.cnblogs.com/predisw/p/4847483.html
构造函数和clone以及在继承中相关推荐
- C++:继承中的构造函数和析构函数
C++:继承中的构造函数和析构函数 1.继承中构造函数和析构函数调用顺序 a.调用父类构造函数: b.调用其他成员的构造函数: c.调用子类构造函数: d.析构调用顺序相反. #include < ...
- C++继承中构造函数、析构函数调用顺序及虚析构函数
首先说说构造函数,大家都知道构造函数里就可以调用成员变量,而继承中子类是把基类的成员变成自己的成员,那么也就是说子类在构造函数里就可以调用基类的成员了,这就说明创建子类的时候必须先调用基类的构造函数, ...
- C++继承中析构函数 构造函数的调用顺序以及虚析构函数
首先说说构造函数.大家都知道构造函数里就能够调用成员变量,而继承中子类是把基类的成员变成自己的成员,那么也就是说子类在构造函数里就能够调用基类的成员了,这就说明创建子类的时候必须先调用基类的构造函数, ...
- java 继承 子类 实例化_关于Java继承中父类和子类构造函数的问题
Java子类在实例化时默认调用的是父类的无参构造函数,不论实例化时调用的是子类的有参还是无参构造函数, 1.当父类没有显式定义构造方法时, 编辑器会默认为此类添加一个隐式无参构造函数.此时子类可以有自 ...
- c++中的继承--2(继承中的析构函数和构造函数,继承中同名成员,继承中静态成员)
继承中的构造函数和析构函数 继承中的构造和析构顺序 子类创建对象时,先调用父类的构造,然后调用自身构造 析构顺序与构造顺序相反 子类不会继承父类的构造函数和析构函数 如果父类中没有合适默认构造,那么子 ...
- c++继承-----继承中构造函数写法
父类中的属性: 调用父类的构造函数初始化 成员函数的方式初始化 子类中的构造函数: 必须要调用父类构造函数 必须采用初始化参数列表的方式 子类想构造无参对象,父类必须要写无参构造函数(隐式调用构造函数 ...
- 7-15 单继承中的构造函数与析构函数 (10 分)
7-15 单继承中的构造函数与析构函数 (10 分 编写代码实现一个表示点的父类Dot和一个表示圆的子类Cir,求圆的面积. Dot类有两个private数据成员 float x,y; Cir类新增一 ...
- java继承关键字super_java学习笔记-继承中super关键字
背景: 在java继承的概念中我们得知,被声明为私有的类成员对所属的类来说仍然是私有的.类之外的任何代码都不能访问,包括子类. super关键字的两种用法: 1.用于调用超类的构造函数: 2.用于访问 ...
- C++继承中的构造与析构
文章目录 1 C++继承中的构造 1.1 子类对象初始化父类成员的方式 1.2 子类对象的构造 2 C++继承中的析构 2.1 子类对象的析构 1 C++继承中的构造 1.1 子类对象初始化父类成员的 ...
最新文章
- 冠军奖3万元!CSDN×易观算法大赛开赛啦
- 伯努利分布方差_统计知识(4)——分布
- 稀疏编码(Sparse Coding)(二)
- 肝!超好懂的 Python 文件读写教程!
- oracle语句求保有率,Oracle之保有量计算(当前记录等于前几条记录之和)
- DirectSound 混音的实现
- 【牛客 - 696D】小K的雕塑(dp,鸽巢原理,01背包类问题)
- 使用Xshell通过堡垒机登录服务器
- WinForm高级控件实例--职员信息登记
- xampp修改mysql的默认空密码
- Ubuntu 6.10 发布
- visual studio运行时库MT、MTd、MD、MDd
- java 生成拼音首字母_java 根据汉字生成拼音全拼或拼音首字母的示例
- python3 sorted()的用法
- 无损数据压缩算法c语言,C语言实现无损压缩算法
- Android第三方授权分享在新浪微博授权提示:文件不存在 C8998 的解决方法
- 艾司博讯:拼多多机器人客服在哪里
- 玩转数据可视化之R语言ggplot2:(八)ggplot2绘制空间地理数据图
- 静态HTML网页设计作品——仿2018淘宝首页(1页) HTML+CSS+JavaScript 学生DW网页设计作业成品 web课程设计网页规划与设计 计算机毕设网页设计源码
- 简单说一linux内核的内存模型(平坦,不连续,稀疏等三种内存模型)
热门文章
- python网络编程知识点_python 网络编程要点
- 客户将数据库迁移上云的常用办法
- 【BZOJ1003】物流运输
- dexpler的使用方法
- 当某个快捷键不能用时很可能是热键冲突
- mysql数据库的数据类型转换_MySQL 和Server 2000 数据库中数据类型的转换
- 编程实现背包的递归和非递归两种解法_算法动态规划(七)背包问题4
- mysql 开发 生产_在没有表锁定的情况下在巨大的MySQL生产表...
- 微信小程序开发实战基础二、wxml模板,动态更新内联样式
- 我的虚拟化设想(My virtualization vision)