重寫也就是,繼承的不同方面,即子類對父類的縱向擴充套件。
(行為改變了,且版本增高了)
下面的例子中,同樣有方法run,但引用vehicle和引用car兩種例項的時候,列印出來的語句是不一樣的。也就是說,用不同型別例項呼叫方法的時候,與例項相關聯的版本就會被呼叫
例如:
static
void
main
(string
args)
class
vehicle
}class
car:
vehicle
}
函式成員(一定是有行為,邏輯的。所以一定不是資料成員)
體現比較多的就是方法和屬性,下面的例子,就是屬性的重寫
static
void
main
(string
args)
class
vehicle
set}
public
virtual
void
run()}
class
car:
vehicle
set}
public
override
void
run(
)}
可見,就是從父類繼承下來的,需要是可見的。如果是private那麼能繼承下來,但是並不能訪問。
簽名要一致,乙個很簡單的例子就是父類的方法後面括號如果定義了乙個引數,那麼子類的裡面,也需要定義同樣的引數,即有同樣的格式
利用父類變數建立子類例項的時候,再利用這個變數去呼叫方法,一定是呼叫的這個子類例項裡面已經被重寫了的方法,而且是繼承鏈裡最新的那一種。
vehicle vehicle =
newcar()
;
是可以,這樣去呼叫的,就可以利用一些子類裡有了的方法。
並且可以強制轉換成這樣
car car =
(car) vehicle;
person[
] p =
newperson[10
];
在person這個陣列裡面可以儲存他的子類的物件,雖然明面是都是person型別的
子類可以賦值給父類
C艹 重寫與多型
1.類成員的 縱向擴充套件 成員越來越多 2.類成員的 縱向擴充套件 行為改變,版本增高 例using system using system.collections.generic using system.linq using system.text using system.threading...
C 多型(重寫與覆蓋)
覆蓋 覆蓋 在子類和父類中,方法名 引數列表和返回值全部相同,構成覆蓋,重寫時子類重寫父類的方法,即子類將父類的方法覆蓋。此時需要使用new關鍵字,隱藏父類的細節 class animal class cat animal 重寫 public class a public class b a sta...
重寫與多型
一.方法重寫規則 1.方法名相同。2.引數列表相同。3.返回值型別相同或者是其子類。4.訪問許可權不能嚴於父類。二.抽象方法 abstract也可用於方法 1.抽象方法沒有方法體。2.抽象方法必須在抽象類裡。3.抽象方法必須在子類中被實現,除非子類是抽象類。三.多型 是具有表現多種形態的能力的特徵。...