把公有的資料或方法放在父類中,在子類中放不同的屬性,子類繼承父類
例子:class diren
}class boss:diren
}boss boss = new boss();
boss.ai();
描述:boss類繼承diren類,所以能呼叫diren類中的ai方法
如果方法或字段是私有的,則不能呼叫
diren diren;
diren = new boss();
父類宣告的物件可以用子類去構造
但不能使用子類中的方法,如: diren.attack(); 需要使用強制轉換
boss boss = (boss)diren;
boss.attack();
diren diren = new diren();
用父類構造的物件無法強制轉換為子類,如:boss boss = (boss)diren;
父類中關鍵字: virtual 放在訪問修飾符後面
子類中關鍵字: override
有共同的方法但方法中體現的**不同可以使用虛方法,在子類中重寫方法
注意: 我們在子類中重寫的虛方法,不管在哪呼叫,都是使用的重寫後的方法
前提: 用子類建立的物件呼叫虛方法,是用的重寫後的方法
用父類建立的物件呼叫虛方法,還是用的父類中原有的虛方法
例子: class diren
public virtual void move()
}class boss:diren
public override void move()
}呼叫父類中的move:
diren diren = new diren();
diren.ai(); 這裡顯示的就是父類中move方法
呼叫子類中的move:
boss boss = new boss();
boss.attack(); 這裡顯示的就是子類中move方法
1、介紹
在子類中宣告和父類中方法名一樣的方法,而且沒有使用虛方法的關鍵字
父類中的方法就被隱藏了,可以在子類方法前加 new 關鍵字
2、區別
虛方法是重寫後是原來的方法不存在了,用子類建立的物件只能呼叫重寫後的方法
隱藏方法是把方法隱藏了,原來的方法還在
例子: class diren
public void move()
}class boss:diren
public int void move()
}呼叫父類中的move:(呼叫隱藏方法)
diren diren = new boss();
diren.ai(); 這裡顯示的就是父類中move方法
呼叫子類中的move:
boss boss = new boss();
boss.attack(); 這裡顯示的就是子類中move方法
this :可以通過 this 訪問當前類中的字段、屬性和方法
base : base 只能訪問父類中的屬性和方法
抽象類不能例項化,可以包含普通函式和抽象函式
抽象函式只有函式定義沒有函式體,抽象函式本身也是虛擬的virtual(虛函式)
關鍵字: abstract
例子:abstract class bird
如果有抽象函式,那麼這個類也是抽象類
class crow:bird
}如果乙個子類繼承了乙個抽象類,就必須要重寫該抽象方法!
bird crow = new crow();
crow.fly();
雖然抽象類不能構造乙個物件,但是可以宣告乙個物件在用子類去構造
bird crow 宣告
new crow() 構造
1、介紹
c#允許把類和方法宣告為 sealed ,對於類,表示不能繼承該類
對於方法,表示不能重寫該方法
2、使用
防止某些不需要繼承或重寫的類和方法導致**混亂!
3、密封方法
class diren
}class boss:diren
}只能在重寫的方法前加 sealed ,表示這個方法不能被重寫了
1、在子類中呼叫父類的預設建構函式(無參)
class bassclass
}class derivedclass:bassclass
}關鍵字: :base()
如果構造乙個物件,會先呼叫父類的,然後呼叫子類的建構函式
2、呼叫有參的建構函式
class bassclass
}class derivedclass:bassclass
}關鍵字: base( 型別 引數)
如果構造乙個物件,會先呼叫父類的,然後呼叫子類的建構函式
1、public和private
用於修飾類中的字段和方法
private 私有的 表示這個欄位或方法只能在該類內部中訪問
public 公有的 表示這個欄位或方法可以通過宣告的物件訪問
public class...
可以通過宣告別的專案的類來訪問該類
2、protected
protected 應用於型別和內嵌型別的所有成員
只有派生的型別能訪問該項
class bassclass
class derivedclass:bassclass
}當沒有繼承時 protected 與 private 一樣,
有繼承時表示可以在子類中使用 protected 修飾的字段
3、static
static 可以用來修飾字段和方法
修飾字段和方法時叫做(靜態字段)和(靜態方法)
注意:使用 static 修飾的成員只能通過類名訪問
通過類構造出來的物件中不包含靜態成員
使用: 可以通過 類名.
的形式直接訪問
例子: class classxyz
classxyz.z = 100;
注意:你可以構造乙個物件來訪問類中的方法或字段,但字段的值或方法中的方法體不一樣
但靜態成員是唯一的,給它賦值或寫上方法體後,所有物件使用都是一樣的效果!
介面不能有建構函式,不能有欄位,也不允許運算子過載
介面定義中不允許宣告成員的修飾符,介面成員都是公有的
實現:定義了乙個介面後,呼叫該介面叫實現
1、介面的名稱一般用i開頭
2、宣告
inte***ce ifly
介面中的函式類似於抽象類,只有函式定義沒有函式體
3、派生的介面
inte***ce ia
inte***ce ib:ia
class bird :ib
public void method2()
}當ib繼承ia後,bird繼承ib就會有ib和ia中的方法
son a = new son();
father b = a; 相當於 father b = new son();
f表示隱藏方法
g表示虛方法
a.f(); 通過父類宣告的物件,使用父類的隱藏方法
b.f(); 通過子類宣告的物件,使用子類的隱藏方法
a.g(); 使用子類中的虛方法
b.g(); 使用子類中的虛方法
只要用子類構造了,不論父類物件還是子類物件呼叫都是使用重寫後的虛方法!!
而隱藏方法是父類宣告物件用父類中的方法,子類宣告物件用子類中的方法!!
如果乙個虛方法在子類中沒有新增 override 關鍵字,就說明沒有被重寫
而是被隱藏了!
虛方法,抽象類 ,介面
抽象類不能被例項化 只能宣告方法,不能實現,只能有他的 是乙個隱式的虛方法 抽象類裡的方法不能是私有的 如果抽象是私有的,那麼他的子類訪問不了它 在抽象方法中使用static和virtual修飾符是錯誤的 在靜態屬性中使用abstract是錯誤的 abstract方法只能在抽象類中宣告 而virtu...
抽象類 介面 繼承
抽象類 抽象類提供多個派生類共享基類的公共定義,它既可以提供抽象方法,也可以提供非抽象方法。抽象類不能例項化,必須通過繼承由派生類實現其抽象方法,因此對抽象類不能使用new關鍵字,也不能被密封。如果派生類沒有實現所有的抽象方法,則該派生類也必須宣告為抽象類。否則,必須實現抽象類的方法和屬性,實現抽象...
介面 抽象類 抽象方法 虛方法 的區別
介面 抽象類 抽象方法 虛方法 的區別 介面 抽象類 抽象方法 虛方法 這四個名詞時非常容易混淆的 首先說一下介面 與抽象類 的異同 相同點 1.他們都不能例項化自己,也就是說都是用來被繼承的。2.抽象類中的抽象方法和介面方法一樣,都不能有方法體 不同點 1.抽象類裡可以有欄位,介面中不能有欄位.2...