日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

构造函数和clone以及在继承中

發布時間:2023/12/10 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 构造函数和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以及在继承中的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。