A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 穷傻呆丑萌 中级黑马   /  2013-8-30 19:14  /  1325 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

一、封装
1、定义
         每个对象都包含它进行操作所需要的所有信息,这个特性称为封装。因此对象不必以来其他对象来完成自己的操作。这样方法和类包装在类中,通过类的实例来实现。
2、好处
良好的封装能够减少耦合;
类内部实现就可以自由地修改;
类具有清晰的接口;
3、实例
[csharp]  
<span style="font-size:18px;">class  Cat  

{  

        private string name="";  

        public Cat(string name)  

        {  

             this name=name;  

        }  



       public string Shout()  

       {  

               return "我的名字叫"+name+"小猫";  

      }  

}</span>  


二、继承
1、定义
        继承就是从父类中获取一些公开的成员,如方法和属性。C#中只允许继承一个父类,但允许继承多个接口。如果子类继承接口,则必须实现接口中定义的所有公开成员。
         公开成员是指在父类中定义为public的成员(public的作用域可在子类中生效,而private作用域则不可)
子类继承父类:
子类拥有父类非Private的属性和功能;
子类具有自己的属性和功能,即子类可以扩展父类没有的属性和功能;
子类还可以以自己的方式实现父类的功能(方法重写)
2、优点
        继承使得所有子类公共部分都放在父类中,使得代码得到共享,这就避免了重复。此外,继承可使得修改或扩展继承而来的实现都较为容易。
3、实例
[csharp]  
<span style="font-size:18px;">例1:  

//父类 ParentClass  

classParentClass  

{  

       privatestring_name;                //属性  

       public stringParentName        //父类名  

       {  

              get{return _name;}  

              set{_name=value;}  

        }  

}</span>  

<span style="font-size:18px;">//子类  

//父类SonClass  

class SonClass:ParentClass  

{  

       privatestring_name;                //属性  

       public stringSonName        //子类名  

       {  

              get{return _name;}  

              set{_name=value;}  

        }  

}  

//客户端  

SonClass myson=new SonClass(); //创建子类对象  

myson.ParentName="父名";          //自动继承父类的属性  

myson.SonName="子名";          //子类自己的属性  

例2:  

  private void button1_Click(object sender,EventArgs e)  

        {  

            Cat cat = new Cat("咪咪");//将类实例化 Cat  cat声明一个Cat对象,对象名为cat;newCat()将此cat对象实例化  

            cat.ShoutNum = 5;            //给属性赋值  

            MessageBox.Show(cat.Shout());  

        }  

        class Animal                               //定义父类  

        {  

            protected string name ="";          //注意变为Protected  子类可以继承  

            public Animal(string name)  

            {  

                this.name = name;  



            }  

            public Animal()  

            {  

                this.name = "无名";  

            }  

            protected int shoutNum = 3;               //变为protected  

            public int ShoutNum  

            {  

                get  

                {  

                    return shoutNum;  

                }  

                set  

                {  

                    shoutNum = value;  

                }  

            }  

        }  

        class Cat : Animal                       //注意变化  

        {  

            public Cat() : base()                //子类构造方法需要调用父类同样参数类型的构造方法,用base关键字代表父类  

            { }  

            public Cat(string name):base(name)           //注意变化  

            { }  

            public string Shout()  

            {  

                string result = "";  

                for (int i = 0; i <shoutNum; i++)  

                    result += "喵!";  

                return "我的名字叫:" +name + "" + result;  

            }  

        }  

        class Dog : Animal                               //注意变化  

        {  

            public Dog() : base()  

            { }  

            public Dog(string name): base(name)  

            { }  

            public string shout()  

            {  

                string result = "";  

                for (int i = 0; i <shoutNum; i++)  

                    result += "汪!";  

                return "我的名字叫:" +name + "" + result;  

            }  

        }  

        private void button2_Click(objectsender, EventArgs e)  

        {  

            Dog dog = new Dog("狗");//将类实例化 Cat  cat声明一个Cat对象,对象名为cat;newCat()将此cat对象实例化  

            dog.ShoutNum = 5;            //给属性赋值  

            MessageBox.Show(dog.shout());  

        }  
</span>  

4、注意
Protected表示继承时子类可以对基类有完全访问权。也就是说protected修饰的类成员,对子类公开,段不对其他类公开。
三、多态
1、定义
       多态是指类可以有多种形态,通过修改可以形成多个实现方法。子类从父类继承时它会获得父类的所有方法、字段、属性、事件。多态表示不同的对象可以执行相同的操作,但要通过它们自己的实现代码来执行。
       若要改变父类的数据和行为,两种方式:可创建新的成员替换父级成员,或者可以重写虚拟的父级成员。
(1)若要替换父级成员,需要使用new关键字。下面是GetName方法的两种形态,一种是返回父级名称,一种是返回子级名称。
[csharp]  
<span style="font-size:18px;">第一种:返回父级名称  

class PerentClass    //父类  

{  

       public string GetName()  

       {  

          return"父级名称";  

        }  

}  

第二种:返回子级名称  

class SonClass:PerentClass     //子类继承父类  

{  

       public new string GetName()  

       {  

          return"子级名称";  

        }  

}  

(2)重写虚拟的父级成员的两个条件:父级成员使用关键字“virtual”;子级成员使用“override”。代码  

class PerentClass    //父类  

{  

       public virtual string  GetName()  

       {  

          return"父级名称";  

        }  

}  



class SonClass:PerentClass     //子类继承父类  

{  

       public override string GetName()  

       {  

          return"子级名称";  

        }  

}</span>  
2、注意
子类以父类省份出现
子类在工作中以自己的方式来实现
子类乙父类的身份出现时,子类特有的属性和方法不可同时使用
使用多态时,需了解:虚方法和方法重写
为了使子类的实例完全接替来自父类的成员,父类必须将该成员声明为虚拟的。这是通过在该成员的返回类型之前添加virtual来实现。
子类选择使用override关键字,将父类实现替换为自己的实现,这就是方法重写。
3、实例
(1)创建类"Employee"表示公司里的员工。它包含虚方法GetDepart。代码:
[csharp]  
class Employee    //父类  

{  

       public virtual string  GetDepart()  

       {  

          return"总公司";  

        }  

}  
(2)创建类"MarketEmployee",它重写了父类中的GetDepart方法。代码
[csharp]  
class MarketEmployee:Employee    //子类继承父类  

{  

       public override string GetDepart()  

       {  

          return"市场部";  

        }  

}  
(3)客户端调用两种形态的方法。
[csharp]  www.2cto.com
Employee myee=new Employee();                            //创建父类  

string str1=myee.GetDepart();                                 //结果为父公司  

MarketEmployee yee=newMarketEmployee();    //创建子类  

string str2=yee.GetDepart();                                   //结果为子公司  

评分

参与人数 1技术分 +1 收起 理由
赵宗荣 + 1

查看全部评分

4 个回复

倒序浏览
不错!顶一个。。
回复 使用道具 举报
值得学习ing!
回复 使用道具 举报
准确的说应该是面向对象三大特点吧。。。
回复 使用道具 举报
却是值得看看!楼主辛苦了
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马