有学弟问我什么是面向对象编程
我说“类”是一些具有相同“属性”和“方法”的“对象”的抽象。比如说,
张三李四王五都是人类的不同对象,都会说话,都是站着用两脚走路;
欢欢毛毛豆豆都是狗类的不同对象,都会旺旺,都是趴着用四爪爬行;
同一类中的不同对象之间有差异,但仅仅是具体的属性值的差异,如张三李四王五身高不同,
不同类之间则具有不同的属性,如欢欢毛毛豆豆与张三李四王五相比,没有身高这个属性。
还可以进一步抽象,人类和狗类都是哺乳动物类,都具有哺乳动物类的一些特征:哺乳,胎生……
这就叫人类和狗类“继承”了哺乳动物类的一些特征,或哺乳动物类“派生”出人类和狗类,
哺乳动物类是人类和狗类的“基类”或“父类”,人类和狗类是哺乳动物类的“派生类”或“子类”。
----------------------------------------GIS大学论坛---------------------------------------------------
为了进一步说清楚这些抽象的概念,我写了个小程序。
首先创建了一个基类:变形金刚(Transfer),
然后创建了两个派生类:博派汽车人(Autobot)和狂派霸天虎(Decepticon)。
所有变形金刚都具有这三个属性:姓名(name)、战斗力(power)和状态(state),以及一个方法:战斗(fight)。
博派和狂派毕竟是两个不同的类,因此也有差异:
博派具有一种独特的方法:奔跑(Run),狂派也有一种独特的方法:飞行(Fly)。
最后在窗体中,我用做好的类定义了两个汽车人对象和两个霸天虎对象,让他们Run、Fly和Fight。
在C#程序中我有意区分了“字段”和“属性”,以及“私有”、“保护”和“公有”,还使用了“抽象类”和“构造函数”的“重载”。配了大量注释,希望大家仔细阅读后能够有一些理解,然后再搜一些面向对象编程的概念或教程看看。
--------------------------------------------www.gisuniversity.net------------------------------------------
变形金刚类Transfer.cs代码如下:
/////////////////////////////////////////////////////////////////////////////////////
using System;
using System.Collections.Generic;
using System.Text;
namespace OO
{
//变形金刚类。是个抽象类,不能被实例化。
abstract public class Transformer
{
//字段:姓名。这是个私有类型,不能被派生类继承,但是通过下面公有的Name属性可以访问。
private string name;
//字段:状态。这是个保护类型,可以被派生类继承。
protected string state;
//字段:战斗力。这是个公有类型,可以随便访问。
public int power;
//属性:姓名。可读可写。
public string Name
{
get { return name; }
set { name = value; }
}
//属性:状态。可读不可写。
public string State
{
get { return this.Name + this.state; }
}
//方法:战斗。参数:对手。返回战斗结果。
public void Fight(Transformer rival)
{
if (this.power > rival.power)
{
this.state = "赢了";
}
else if (this.power < rival.power)
{
this.state = "输了";
}
else
{
this.state = "平了";
}
}
}
}
////////////////////////////////////////////////////////////////////////////////////
-------------------------------------------《GIS初学者》--------------------------------------------------
博派汽车人类Autobot.cs代码如下:
////////////////////////////////////////////////////////////////////////////////////
using System;
using System.Collections.Generic;
using System.Text;
namespace OO
{
//博派(汽车人)类。继承了变形金刚类。
class Autobot:Transformer
{
//构造函数1(无参)
public Autobot()
{
}
//构造函数2(带参)
public Autobot(string itsName)
{
this.Name = itsName;
}
//方法:奔跑
public void Run()
{
this.state = "在奔跑";
}
}
}
/////////////////////////////////////////////////////////////////////////////////////
--------------------------------------gisbeginner@163.com---------------------------------------
狂派霸天虎类Decepticon.cs代码如下:
/////////////////////////////////////////////////////////////////////////////////////
using System;
using System.Collections.Generic;
using System.Text;
namespace OO
{
//狂派类(霸天虎)。继承了变形金刚类。
class Decepticon : Transformer
{
//构造函数1(无参)
public Decepticon()
{
}
//构造函数2(带参)
public Decepticon(string itsName)
{
this.Name = itsName;
}
//方法:飞行
public void Fly()
{
this.state = "在飞行";
}
}
}
//////////////////////////////////////////////////////////////////////////////////////
------------------------------全中国GIS初学者们,团结起来!---------------------------------
在窗体设计器中只有一个按钮Button1,窗体Form1.cs代码如下:
//////////////////////////////////////////////////////////////////////////////////////
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
namespace OO
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
//点击按钮
private void button1_Click(object sender, EventArgs e)
{
Start();
}
//开始
private void Start()
{
//创建并设置两个博派(汽车人)和两个狂派(霸天虎)
Autobot myAutobot1 = new Autobot();
myAutobot1.Name = "擎天柱";
myAutobot1.power = 100;
Decepticon myDecepticon1 = new Decepticon();
myDecepticon1.Name = "威震天";
myDecepticon1.power = 100;
//注意这里用了第二种构造函数
Autobot myAutobot2 = new Autobot("大黄蜂");
myAutobot2.power = 90;
Decepticon myDecepticon2 = new Decepticon("红蜘蛛");
myDecepticon2.power = 80;
//用来存放文字信息
string result = "";
//一个霸天虎在飞
myDecepticon2.Fly();
result += myDecepticon2.State +" ";
//一个汽车人扁它
myAutobot2.Fight(myDecepticon2);
result += myAutobot2.Name + "挑战" + myDecepticon2.Name + " " + myAutobot2.State + "\n";
//又有霸天虎在飞
myDecepticon1.Fly();
result += myDecepticon1.State + " ";
(本文已被浏览 次) | | |