構造器中呼叫動態繫結的方法
構造器中呼叫動態繫結的方法
若在構造器中呼叫動態繫結的方法,不會呼叫父類的方法,而是優先呼叫子類中覆蓋的繫結方法。
如果此時在方法中使用成員變數可能會造成重大錯誤。
class Glyph {
void draw() {
System.out.println("G() in draw");
}
Glyph() {
System.out.println("G() before draw");
draw();
System.out.println("G() after draw");
}
}
class RoundGlyyph extends Glyph {
int r = 1;
RoundGlyyph(int r) {
this.r = r;
System.out.println("R(), r = "+r);
}
void draw() {
System.out.println("R() in draw, r = "+r);
}
}
public class extendTest {
@Test
void initExtendsTest() {
new RoundGlyyph(5);
}
}
此處在僅僅分配控制程式碼時物件對應的儲存空間為二進位制全0。
而在父類Glyph構造器中呼叫了子類RoundGlyph的方法draw(),此時子類的成員物件還未初始化,得到的半徑r為二進位制全0,不是初始化的1,更不是構造器設定的5。
所以要注意構造器內能安全使用的方法在基礎類中必須宣告為final。
相關文章
- java 方法呼叫繫結Java
- C++的動態繫結和靜態繫結C++
- 理解靜態繫結與動態繫結
- VS中呼叫DLL動態庫的方法
- Vue 動態資料繫結核心方法Vue
- 動態繫結和靜態繫結的簡單理解
- Effective Java - 靜態方法與構造器Java
- C++ — 靜態繫結與動態繫結C++
- jQuery給動態新增的元素繫結事件的方法jQuery事件
- java繼承-靜態繫結和動態繫結Java繼承
- 動態繫結一
- 動態繫結的心得 (轉)
- 深入理解 C++ 的動態繫結和靜態繫結C++
- 關於動態字串的繫結字串
- 繫結變數在靜態sql和動態sql中變數SQL
- VB呼叫C程式的方法—動態連結庫法 (轉)C程式
- JAVA動態繫結淺析Java
- 三、動態繫結屬性
- 靜態程式碼塊、構造程式碼塊、構造方法構造方法
- 小解惑:查詢構造器與集合中的 get 方法
- Java 中 String 的構造方法Java構造方法
- vue 動態繫結 v-modelVue
- 動態繫結 input v-model
- Vue 動態繫結CSS樣式VueCSS
- Java 動態繫結機制的內幕Java
- 動態生成的html元素繫結click事件HTML事件
- jquery 為動態新增的元素繫結事件jQuery事件
- 直譯器構造實現函式呼叫函式
- 動態SQL——構造通用動態頁面查詢SQL
- 查詢構造器結果--物件陣列互轉方法物件陣列
- java之繼承中的構造方法Java繼承構造方法
- jquery給動態新增的dom元素繫結事件jQuery事件
- 動態建立的DOM元素進行事件繫結事件
- class 和 style 資料動態繫結
- Vue select 繫結動態變數Vue變數
- 域名繫結動態IP實戰案例
- vue動態(type可變)input繫結Vue
- 介面的繫結方案和動態SQLSQL