C#的繼承、介面、抽象類理解
OOP三特性:繼承、封裝、多型
繼承:C#屬於單繼承,即派生類最多隻能有一個直接基類,但可以傳遞繼承,即A類派生B類,B類派生C類,派生類會保留所有基類以及傳遞基類的欄位、屬性、方法等所有內容。如果要在派生類中隱藏基類內容,可以通過new關鍵字實現,或是通過base來呼叫基類的內容
傳遞繼承示例:
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace 繼承 { public class Program { public class A { public string _fieldA = "A類欄位"; public int PropertyA { get; set; } //如果要提供一個示例方法,則使用virtual關鍵字修飾,派生類如果不重寫virtual方法,則使用基類提供的virtual方法,且必須有對應的實現,重寫則使用重寫方法 //如果只提供一個規範,則使用abstract關鍵字,注意abstract方法只能在abstract類中使用,而且沒有任何實現,且必須在派生類中重寫,除非派生類也是抽象類(抽象派生類會直接繼承抽象方法而不實現) public virtual void FuncA() { Console.WriteLine("A類示例方法FuncA"); } } public class B : A { public string _fieldB = "B類欄位"; public override void FuncA() { Console.WriteLine("重寫A類方法"); } } public class C : B { public string _fieldC = "C類欄位"; } static void Main(string[] args) { C c = new C(); Console.ReadKey(); } } }
傳遞繼承如圖,例項方法的呼叫必須基於有一個物件,而靜態方法不屬於物件,可以直接呼叫。
抽象類:使用abstract關鍵字建立不完整且必須在派生類中實現的類和class成員。使用sealed可以防止繼承以前標記為virtual的類或某些成員。抽象類用於繼承,故隱式的為public,且不可被private、protected、internal修飾。
注意:1.基類virtual方法若不在派生類中override重寫,則對派生類例項呼叫會使用基類的virtual方法,相當於預定義
2.若基類virtual方法在派生類override重寫,則對派生類例項呼叫會使用重寫的override方法
3.抽象方法只能在抽象類中修飾,且沒有實現,結束時一個分號,必須在派生類中override實現
介面:
1.由於C#是單繼承,要實現多重繼承可以通過介面實現,C#介面不能有public、private、internal、protected修飾符,介面隱式public
2.如果介面繼承介面,子介面有與父介面同名方法,可以new隱藏父介面方法
3.介面無建構函式,不能new來例項化,介面一旦實現,實現類中必須實現介面所有方法,除非實現類是抽象類
區別:介面更多的表是一種can-do的規範,多用於實現多重繼承,且與繼承類關係並不緊密。抽象則類似於IS-A關係,與繼承類關係較為緊密。抽象類不可以new,不可以sealed,介面中繼承父介面的子介面可以通過new來重寫覆蓋同名父方法。兩者都不可以使用private、protected、internal修飾。介面通常用於規範行為,而抽象類是對物件的模擬,例如C#和java都實現oop介面,但C#是MS抽象類,java是sun抽象類
介面示例:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace 介面和集合
{
class Program
{
//介面解釋和用途:
//⑴由於C#是單繼承,要實現多重繼承可以通過介面實現,C#介面不能有public、private、internal、protected修飾符,介面隱式public
//⑵如果介面繼承介面,子介面有與父介面同名方法,可以new隱藏父介面方法
//⑶介面無建構函式,不能new來例項化,介面一旦實現,實現類中必須實現介面所有方法,除非實現類是抽象類
//賬戶介面1:通用
public interface IBankGeneralCustomer
{
//存錢
void Save(double _payMoney);
//取錢
bool Withdraw(double _withdrawMoney);
//餘額
void Surplus(double _surplusMoney);
}
//賬戶介面2:土豪專用
public interface IBankTuhaoCustomer
{
//土豪提醒
void startReminder(string message);
void endReminder(string message);
}
//屌絲客戶
public class LiaoRan:IBankGeneralCustomer
{
public double balance { get; set; }
public void Save(double _payMoney)
{
balance = balance + _payMoney;
}
public bool Withdraw(double _withdrawMoney)
{
if (balance - _withdrawMoney <= 0)
return false;
else
{
balance = balance - _withdrawMoney;
Console.WriteLine("取出{0}剩餘{1}", _withdrawMoney, balance);
return true;
}
}
public void Surplus(double _surplusMoney)
{
Console.WriteLine("餘額{0}", balance);
}
}
//土豪客戶
public class Guhao:IBankGeneralCustomer,IBankTuhaoCustomer
{
public double balance { get; set; }
public void Save(double _payMoney)
{
balance = balance + _payMoney;
}
public bool Withdraw(double _withdrawMoney)
{
if (balance-_withdrawMoney <= 0)
return false;
else
{
balance = balance - _withdrawMoney;
Console.WriteLine("取出{0}剩餘{1}", _withdrawMoney, balance);
return true;
}
}
public void Surplus(double _surplusMoney)
{
Console.WriteLine("餘額{0}", balance);
}
public void startReminder(string message)
{
Console.WriteLine("交易開始{0}",message);
}
public void endReminder(string message)
{
Console.WriteLine("交易結束{0}",message);
}
}
static void Main(string[] args)
{
LiaoRan lr = new LiaoRan();
lr.Save(50.00);
lr.Withdraw(49.00);
Guhao gh = new Guhao();
gh.startReminder("1號臺");
gh.Save(100.00);
gh.Withdraw(20.00);
gh.endReminder("2號臺");
Console.ReadKey();
}
}
}
相關推薦
Java序列化的方式、object類中的方法、介面和抽象類的區別、ArrayList在迴圈過程中刪除
Java序列化的方式 a.是相應的物件實現了序列化介面Serializable,這個使用的比較多,對於序列化介面Serializable介面是一個空的介面,它的主要作用就是標識這個物件時可序列化的,jre物件在傳輸物件的時候會進行相關的封裝。 b.Externlizab
C#中的介面和抽象類學習
今天學習了介面和抽象類,但並沒有很好的進行整理,所以現在寫的時候,腦子裡多少有點亂亂的,先從介面開始吧。 interface 介面,規定了所有派生類的需要遵循的標準,介面定義了需要做些什麼,但是沒有具體的做法,做法的實現由派生類來做。 介面的定義使用關鍵字Interface,由於需要派生類繼承,所以
一個類繼承實現介面的抽象類是否要重寫其方法
當A類想要實現一個介面中個別方法是(不是所有方法),可以建立一個抽象類去實現該介面,然後在有A類去繼承這個抽象類。注意:這個抽象類必須重寫這個介面的所有方法,A類才可以實現其中的個別方法;如果抽象類沒有實現介面中的所有有方法(不用寫方法體),那麼A類繼承抽象類後就必須重寫抽象
C#的繼承、介面、抽象類理解
OOP三特性:繼承、封裝、多型繼承:C#屬於單繼承,即派生類最多隻能有一個直接基類,但可以傳遞繼承,即A類派生B類,B類派生C類,派生類會保留所有基類以及傳遞基類的欄位、屬性、方法等所有內容。如果要在派生類中隱藏基類內容,可以通過new關鍵字實現,或是通過base來呼叫基類的
2、【C++】資料抽象/資料封裝/介面(抽象類)
一、C++資料抽象 1、定義 資料抽象是指,只向外界提供關鍵資訊,並隱藏其後臺的實現細節,即只表現必要的資訊而不呈現細節。資料抽象是一種依賴於介面和實現分離的程式設計(設計)技術。 C++類為資料抽象提供了可能。它們向外界提供了大量用於操作物件資料的公共方法,也就
12.類、抽象類、匿名類、內部類、繼承、介面、泛型
類、抽象類、匿名類、內部類、繼承、介面、泛型1.獲得一個類的類物件有哪些方式2.過載(Overload)和重寫(Override)的區別。過載的方法能否根據返回型別進行區分?3.說出幾條 Java 中方法過載的最佳實踐4.抽象類和介面的區別5.抽象類中是否可以有靜態的main
C#介面和抽象類:Interface、abstract
一、介面 介面是C#中很常見的工具,概念什麼的就不說了,這裡講幾個值得注意的小地方: 1、介面內部只能有函式、屬性和事件的宣告: <!--<br /> <br /> Code highlighting produced by Actip
【Java】繼承、介面、抽象類、多型之間的關係和區別 【一】
時間對於一個追夢的人來說就是黃金,沒有什麼能阻擋前行的腳步。--致所有和我一樣追逐明天太陽的人介面的理解:介面是對動作的抽象說動作還不如說功能 抽象類理解:抽象類是對根源的抽象 多型的理解:類載入執行時父類的引用指向子類的物件 抽象大小關係:介面>抽象類先通過一個
【Java】繼承、介面、抽象類、多型之間的關係和區別 【二】
多型:執行時引用指向子元素的例項物件【jvm記憶體模型很重要,也是入門的基礎】 接著上面繼續理解,建立一個老師類 package com.physical; public class Teacher extends Person{ String profession
java介面、介面、類、抽象類的區別
1、定義 Java介面是一系列方法的宣告,是一些方法特徵的集合,一個介面只有方法的特徵沒有方法的實現,因此這些方法可以在不同的地方被不同的類實現,而這些實現可以具有不同的行為(功能)。 2、Java介面與介面區別
抽象類、介面、委託
抽象類:提供了部分功能的實現,不能被例項化的類, 除了不能被例項化和含有抽象方法,其餘使用和正常類使用一樣。 特點:不能被例項化
python 抽象類、抽象方法、介面、依賴注入、SOLIP
python 抽象類、抽象方法、介面、依賴注入、SOLIP 1、程式設計原則:SOLIP SOLIP設計原則 1、單一責任原則(SRP) 一個物件對只應該為一個元素負責 2、開放封閉原則(OCP) 對擴充套件開放,修改封閉 3、里
抽象類、介面、內部類
抽象類 抽象方法和抽象類 抽象方法和抽象類必須使用abstract修飾符來定義,有抽象方法的類只能被定義為抽象類,抽象類裡可以沒有抽象方法; 規則如下: 抽象類與抽象方法必須使用abstract修飾符來修飾,抽象方法不能有方法體; 抽象類不能被例項化。即使抽象類
java介面和抽象類的區別和作用(功能、用途、好處)
Java介面: 總結了4點關於JAVA中介面存在的意義: 1、重要性:在Java語言中, abstract class 和interface 是支援抽象類定義的兩種機制。正是由於這兩種機制的存在,才賦予了Java強大的 面向物件能力。
(個人筆記)2018-11-09 包、訪問許可權、抽象類、介面、final
目錄 包 包-引入包 訪問許可權 抽象類 介面 final 包 包-三大作用 1. 區分相同名字的類 2. 當類很多事,可以很多的管理類 3. 控制訪問範圍 包- 打包命令 package 包名 包-命名規範 字母
java第九天---多型、抽象類、介面、各種修飾符的作用及應用場景、內部類
1 什麼叫多型 某一個事物,在不同時刻表現出來的不同狀態。貓可以是貓的型別。貓 m = new 貓(); 同時貓也是動物的一種,也可以把貓稱為動物。動物 d = new 貓(); 2 多型的前提  
一、面試準備--介面和抽象類有什麼區別
對於面向物件程式設計來說,抽象是它的一大特徵之一。在Java中,可以通過兩種形式來體現OOP的抽象:介面和抽象類。 首先,看一下兩者的定義: 抽象類 抽象類是用來捕捉子類的通用特性的 。它不能被例項化,只能被用作子類的超類。抽象類是被用來建立繼承層級裡子類的模板。
基於c# 類、介面、結構的聯絡與區別詳解
本篇文章是對c#中類與介面以及結構的聯絡與區別進行了詳細的分析介紹,需要的朋友參考下 一.C#類與結構的差別1. 值型別與引用型別結構是值型別:值型別在堆疊上分配地址,所有的基型別都是結構型別,例如:int 對應System.int32 結構,string 對應 sy
TypeScript類、介面、繼承
TS引入了 Class(類)這個概念,作為物件的模板。通過class關鍵字,可以定義類。 基本上,TS的 class 可以看作只是一個語法糖,它的絕大部分功能,ES5 都可以做到,新的 class 寫法只是讓物件原型的寫法更加清晰、
Java基礎學習之介面和抽象類的概念、區別及適用的場景
1.介面 介面是抽象方法的集合,一個介面只有方法的形狀而沒有方法的具體實現,介面是Java面向物件提供的一種機制。 Java語言是一種單繼承的,在類的繼承中通過實現多個介面間接實現了多繼承功能。介面的宣告: [public] interface InterfaceName{