自學物件導向

來源:互聯網
上載者:User

 

物件導向編程(OOP,Object(對象) Oriented(面向) Programming(編程))
是將現實世界中的概念類比到電腦程式中,它將現實世界中的所有事物視為對象。

萬物皆對象 類為產品的藍圖,對象為一個產品。
blueprint manufacture = new blueprint();

例如一輛汽車 屬性有顏色,速度;方法有加速,減速。

class Car //定義一個Car類
{
 string color;   //顏色
 int speed;      //速度
 void speedup()  //加速
 {
  //語句;
 }
 void slowDown() //減速
 {
  //語句;
 }
}

我們平日要看電視,只需會用遙控器就可以了,而無需瞭解電視的內部構造。
這種內部資訊的隱藏就叫做‘封裝’

public class TV  //定義一個TV類
{
 string image=黑白; //映像
 string sound=立體聲; //聲音
 void inner()  //內部構造
 {
  //語句;
 }
}

存取修飾詞
public          可被所屬類的成員以及不屬於類的成員訪問
internal        可被當前程式集訪問
protected     可被所屬類或衍生類別的類型訪問
private          僅所屬類的成員才可以訪問

電視機從黑白到彩色再到高清晰,無論怎麼變都會有映像與聲音,下一代繼承上一代的特點並有所發展。
這個就叫做‘繼承’

class ClearTV:TV //定義衍生類別ClearTV繼承於基類TV
{
 string image2=高清晰; 
}

電視機無論如何升級換代,但是舊的VCD依然可以插在最新的電視機上,這個就說明電視機的介面是穩定的。
‘介面’就是某些事物對外提供的一些功能的聲明。

public interface VCD
{
 void Play() //播放
 {
  //語句;
 }
}

注意:實現介面的文法與實現繼承一樣,同樣使用(冒號) :

一個類派生自另一個類,也可以實現介面

class ClearTV:TV,VCD //TV類與VCD介面派生出ClearTV類
{
 string ClearImage=高清晰; 
}

如果兩個介面內部有同樣的方法名,那該如何調用呢,這時候就需要使用到顯式介面。

public interface DVD
{
 void Play() //播放
 {
  //語句;
 }
}
class ClearTV:TV,VCD,DVD //TV類與VCD介面與DVD介面派生出ClearTV類
{
 string image2=高清晰;
 void VCD.Play() //VCD播放
 {
  //語句;
 }
 void DCD.Play() //DVD播放
 {
  //語句;
 }  
}

一個洗衣機可以根據放進衣服的骯髒程度來判斷所需的洗滌時間,這種功能就叫做多態。
方法重載

public class Washer //洗衣機
{
 void abstersion(int cleanlily) //乾淨衣服的洗滌方法
 {
  //語句;
 }
 void abstersion(long dinginess) //骯髒衣服的洗滌方法
 {
  //語句;
 }
}

方法重寫

我想把騎單車的速度變成汽車那麼快
class bicycle
{
 public virtual void career()    //該方法支援重寫
 {
  Console.WriteLine("每小時10公裡");
 }
}
class Car:bicycle
{
 public override void career() //重寫
 {
  Console.WriteLine("每小時200公裡");
 }
}

抽象方法

抽象方法的目的在於指定衍生類別必須實現與這一方法關聯的行為。
abstract class ABC   //抽象類別abc
{
 public abstract void AFunc(); //抽象方法
}
class Derv:ABC   //衍生類別
{
 public override void AFunc() //使用 override關鍵字可在衍生類別中實現抽象方法
 {
  Console.WriteLine("實現抽象方法");
 }
}

基類實現了抽象類別,則衍生類別不需要重新實現該抽象類別。
    abstract class MyAbs  //抽象類別
    {
        public abstract void AbMethod();
    }
    class MyClass:MyAbs  //衍生類別
    {
        public override void AbMethod()
        {
            Console.WriteLine("在MyClass中實現的抽象方法");
        }
    }
    class SubMyClass:MyClass //派生自MyClass的子類
    {
        public void General()
        {
            Console.WriteLine("在SubMyClass中未實現的抽象方法");
        }
    }
    class MyClient
    {
        static void Main()
        {
            SubMyClass objSubClass = new SubMyClass();
            objSubClass.General();
        }
    }
如果你還認為輸出結果是:
在MyClass中實現的抽象方法
在SubMyClass中未實現的抽象方法
那就錯了!。

正確輸入結果:
在SubMyClass中未實現的抽象方法
記住 衍生類別不需要重新實現該抽象類別!

編程高手不是看原理看出來的,而是靠代碼打出來的。我也用所學練習一下。

建立一個Shape類,此類包含一個名為_color的資料成員(用於存放顏色值)和一個getColor()方法(用於擷取顏色值)。這個類還包含一個名為getArea()的抽象方法。用這個類建立名為Circle(圓形)和Square(正方形)的兩個子類,這兩個類都包含兩個資料成員,即_radius和_sideLen 這些衍生類別應提供getArea()方法的實現,以計算相應形狀的面積。

    abstract class Shape
    {
        public string _color;
        public void getColor()
        {
            Console.WriteLine("輸入顏色:");
            this._color = Console.ReadLine();
        }
        public abstract void getArea();
    }
    class Circle : Shape
    {
        double _radius;
        double _sideLen=3.14;
        public override void getArea()
        {
            Console.WriteLine("輸入圓形半徑:");
            this._radius = double.Parse(Console.ReadLine());
            Console.WriteLine("顏色為{0},面積為{1}的圓形", _color, _radius * _sideLen);
        }
    }
    class Square : Shape
    {
        double _radius;
        public override void getArea()
        {
            Console.WriteLine("輸入正方形邊長:");
            this._radius = double.Parse(Console.ReadLine());
            Console.WriteLine("顏色為{0},面積為{1}的正方形", _color, _radius * _radius);
        }
    }
    class Test
    {
        static void Main()
        {
            Circle objCircle = new Circle();
            Square objSquare = new Square();
            objCircle.getColor();
            objCircle.getArea();
            objSquare.getColor();
            objSquare.getArea();
        }
    }

控制台輸出:
輸入顏色:
blue
輸入圓形半徑:
5
顏色為blue,面積為15.7的圓形
輸入顏色:
red
輸入正方形邊長:
5
顏色為red,面積為25的正方形

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.