繼承概念 多態:即一個介面,多個功能 同一種操作作用於不同的對象,可以有不同的解釋,產生不同的執行結果 多態性可以是靜態的或動態的。在靜態多態性中,函數的響應是在編譯時發生的。在動態多態性中,函數的響應是在運行時發生的 靜態多態性 在靜態多態性中,函數的響應是在編譯時發生的 父類中如果有方法需要子類 ...
繼承概念
多態:即一個介面,多個功能
同一種操作作用於不同的對象,可以有不同的解釋,產生不同的執行結果
多態性可以是靜態的或動態的。在靜態多態性中,函數的響應是在編譯時發生的。在動態多態性中,函數的響應是在運行時發生的
靜態多態性
在靜態多態性中,函數的響應是在編譯時發生的
父類中如果有方法需要子類重寫,可以將該方法標記為虛方法
虛方法必須在父類中有實現,空實現也可以
虛方法子類可以重寫,也可以不重寫
實現靜態多態性有兩種方法;
函數重載
運算符重載
函數重載
即在同一範圍中對同一函數名的多重定義
通過定義函數的傳參的不同類型或數量進行區分
在調用函數時,根據傳的參數類型和數量判斷調用名字相同的那個方法
1 using System; 2 3 namespace 函數重載 4 { 5 class printdata 6 { 7 void print(int i) 8 { 9 Console.WriteLine("printing int: {0}", i); 10 } 11 12 void print(double f) 13 { 14 Console.WriteLine("printing folat: {0}", f); 15 } 16 17 void print(string s) 18 { 19 Console.WriteLine("printing string: {0}", s); 20 } 21 22 static void Main(string[] args) 23 { 24 printdata p = new printdata(); 25 26 // 調用 print 來列印整數 27 p.print(34); 28 29 // 調用 print 來列印浮點數 30 p.print(234.643); 31 32 // 調用 print 來列印字元串 33 p.print("Hello Tynam"); 34 35 Console.ReadKey(); 36 37 } 38 } 39 }
運行結果
·
運算符重載
重定義或重載C#中內置的運算符
通過關鍵字operator加運算符的符號來定義
與其他函數一樣,重載運算符有返回類型和參數列表
1 // 改天補demo
可重載和不可重載運算符
可以被重載的一元運算符:+、 -、 !、~、++、--
可以被重載的二元運算符:+、 -、 *、 /、 %
可以被重載的比較運算符:==、!=、<、>、<=、>=
不能被直接重載的條件邏輯運算符:&&、||
不能被重載的賦值運算符:+=、-=、*=、/=、 %=
不能被重載的其他運算符:=、 .、 ?:, ->、 new、 is、sizeof、typeof
動態多態性
在動態多態性中,函數的響應是在運行時發生的
使用關鍵字abstract創建抽象類,用於提供介面的部分類的實現
當一個派生類繼承自該抽象類時,實現即完成
抽象類包含抽象方法,抽象方法可被派生類實現
抽象方法不允許有方法體的
當一個子類繼承抽象類時,必須把父類的所有抽象成員都重寫;若子類也是一個抽象類,可以不寫
子類重寫父類的方法,參數和返回值必須跟父類一樣
抽象方法不能用static修飾
抽象類是有構造函數的,雖然不能被實例化
抽象類標記abstract,不能有任何實現,不能有方法體
1 using System; 2 3 namespace 動態多態性 4 { 5 abstract class Shape 6 { 7 public abstract int area(); 8 } 9 10 class Rectangle : Shape 11 { 12 private int length; 13 private int width; 14 15 public Rectangle(int a = 0, int b = 0) 16 { 17 length = a; 18 width = b; 19 } 20 21 public override int area() 22 { 23 return (width * length); 24 } 25 } 26 27 class RectangleTester 28 { 29 static void Main(string[] args) 30 { 31 Rectangle r = new Rectangle(2, 4); 32 double a = r.area(); 33 Console.WriteLine("RectangleArea is: {0}",a); 34 Console.ReadKey(); 35 } 36 } 37 38 }
運行結果