繼承 介面 虛方法 抽象類

2021-08-13 14:09:28 字數 3899 閱讀 7362

把公有的資料或方法放在父類中,在子類中放不同的屬性,子類繼承父類

例子: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...