博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
构造函数和clone以及在继承中
阅读量:5127 次
发布时间:2019-06-13

本文共 1257 字,大约阅读时间需要 4 分钟。

构造函数

  • 类实例的构造创建过程是:

    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

你可能感兴趣的文章
Visual Studio 2017 初次体验
查看>>
zTree树
查看>>
tips 前端 点击事件
查看>>
ACM: 限时训练题解-Epic Professor-水题
查看>>
Mybatis的使用
查看>>
Node.js 连接 MySQL
查看>>
ACM-ICPC 2018 world final A题 Catch the Plane
查看>>
那些年,那些书
查看>>
如何进行库存管理?
查看>>
面向对象六大基本原则的理解
查看>>
新手程序员在工作中需要注意的问题
查看>>
注解小结
查看>>
HTML DOM笔记
查看>>
【转】Linux 虚拟内存
查看>>
java代码编译与C/C++代码编译的区别
查看>>
Bitmap 算法
查看>>
转载 C#文件中GetCommandLineArgs()
查看>>
list control控件的一些操作
查看>>
精读《useEffect 完全指南》
查看>>
SNF快速开发平台MVC-EasyQuery-拖拽生成SQL脚本
查看>>