9 物件建立過程和多型

2021-10-08 08:19:03 字數 4246 閱讀 5683

5.多型(重重之重 難點)

4.物件建立的過程(了解)

4.1單個物件建立的過程

​ 成員變數 = 新的值;

由結果可知優先順序如下:初始化方式、構造塊、構造方法

由結果可知優先順序如下:靜態**塊、構造塊、構造方法

4.2子類物件建立的過程

(1)main()方法時程式的入口,當建立物件時會在堆區申請一塊儲存區域;

(2)先載入父類再載入子類,因此先執行父類靜態**塊再執行子類**塊;

(3)執行父類的構造塊和父類的構造方法體,此時子類物件中包含的父類部分構造完畢;

(4)執行子類的構造塊和子類的構造方法體,此時子類物件構造完畢,繼續向下執行。

}5.多型(重重之重 難點)

5.1基本概念

多型就是指同一種事物表現出來的多種形態。

5.2語法格式

//父類型別 引用變數名 = new 子類型別();

person pw =

newworker()

;pw.

show()

;//解析: 在編譯階段pw是person型別的引用,因此只能呼叫person類中的show()方法;

//在執行階段pw指向worker型別的物件,因此最終呼叫worker類中的重寫以後的show()方法

5.3多型的效果

(1)當父類引用指向子類物件時,父類引用可以直接呼叫父類的成員方法;

(2)當父類引用指向子類物件時,父類引用不可以直接呼叫子類獨有的成員方法;

(3)對於父子類都有的非靜態成員方法來說,編譯階段呼叫父類版本,執行階段呼叫子類版本;

(4)對於父子類都有的靜態成員方法來說,編譯和執行階段都呼叫父類版本;

5.4引用型別之間的轉換

(1)引用資料型別之間的轉換分為兩種:自動型別轉換和強制型別轉換。

其中自動型別轉換主要指小範圍到大範圍的轉換,也就是子類到父類的轉換。

(2)引用資料型別之間的轉換必須發生在父子類之間,否則編譯報錯。

(3)若擁有父子類關係則編譯通過,若目標型別不是該引用真正指向的子類型別則發生型別轉換異常。

(4)為了避免上述錯誤的發生,每次強轉之前進行型別的判斷,具體如下:

if(父類型別的引用變數名 instanceof 目標型別){}

--------判斷引用指向的物件是否為目標型別,若是則返回true,否則false。

if

(pw instanceof

teacher

)else

package cn.itxdl.day09;

public

class

person

public

person

(string name,

int age)

public string getname()

public

void

setname

(string name)

public

intgetage()

public

void

setage

(int age)

public

void

show()

public

static

void

test()

}

package cn.itxdl.day09;

public

class

worker

extends

person

public

worker

(string name,

int age,

int salary)

public

intgetsalary()

public

void

setsalary

(int salary)

@override

public

void

show()

public

static

void

test()

}

package cn.itxdl.day09;

public

class

teacher

extends

person

public

teacher()

public

teacher

(string name,

int age,

int id)

public

void

setid

(int id)

}@override

public

void

show()

}

package cn.itxdl.day09;

public

class

testpersonworker

else

}}

package cn.itxdl.day09;

public

class

testperson

//自定義成員方法實現引數指定教師物件的自我介紹

public

static

void

showteacher

(teacher t)

//自定義成員方法實現引數指定物件的自我介紹

public

static

void

show

(person p)

public

static

void

main

(string[

] args)

}

5.5實際意義

​ 多型的實際意義在於遮蔽不同子類的差異性實現通用的程式設計,帶來不同的結果。

9 物件的擴充套件

es6一共有5種方法可以遍歷物件的屬性。1 for.in for.in迴圈遍歷物件自身的和繼承的可列舉屬性 不含symbol屬性 2 object.keys obj object.keys返回乙個陣列,包括物件自身的 不含繼承的 所有可列舉屬性 不含symbol屬性 3 object.getownp...

C 物件導向 9 物件模型和this指標

本篇來學習物件模型和this指標,物件模型主要是了解物件的儲存模型。在c 中,類內的成員變數和成員函式是分開儲存的,只有非靜態成員變數才是屬於類的物件上,其他都和類存在不同記憶體區域。1.乙個類的空物件占用記憶體是多大位元組 這裡我們先寫乙個 通過sizeof 函式來列印乙個空的類物件占用記憶體是多...

Vue 9 物件迴圈渲染

在vue中增加物件內容不能通過物件屬性如vm.userinfo.address zj 的方式,應用 一.重新改變物件的引用 vm.userinfo 二.通過vue的set方法向物件中注入資料 vue.set vm.userinfo,address beijing 三.通過vm的例項方法 set vm...