黑马程序员—面向对象之封装、继承、多态

黑马程序员—面向对象之封装、继承、多态
---------------------- <a href="http://edu.csdn.net"target="blank">ASP.Net+Unity开发</a>、<a href="http://edu.csdn.net"target="blank">.Net培训</a>、期待与您交流! ----------------------
刚开始接触面向对象的时候,确实对于封装、继承、多态了解不多,而且还相当困惑;不过,通过自己的学习,再结合高手的意见和方法,对类、属性、构造方法、抽象类、抽象方法、虚方法与封装、继承多态之间的关系也有所了解。
封装:在学习面向过程的时候,习惯了那种从头一句一句写到尾的过程,到了面向对象接触了类、属性和字段,也就渐渐明白:面向对象就是对面向过程的封装。比如说:
class Program
    {
        static void Main(string[] args)
        {
            //在面向过程的时候,变量是定义在主程序中的,现在有了类,都//可以把它们封装在类里面,用的时候new一个对象就可以了。
person p1 = new person();//
            p1.name = "tom";
            p1.age = 22;
            p1.height = 170;
            p1.SayHello();
            Console.WriteLine("我的姓名是{0},今年{1}岁,身高{2}厘米",p1.name,p1.age,p1.height);
   Console.ReadKey();
        }
    }
class person
{
       //属性就是对字段的封装,在主程序中调用就行了。
        private string name;
        public string Name{get;set}
//字段:public 类型¨ 字段
        public int age; 
        public int height;
        //方法:访问修饰符 static 返回值 方法名()
        //方法是对过程的封装,我们把复用的代码都写在方法里,就是要达到//封装的目的
        public void SayHello()
        {
            Console.WriteLine("大家好!");
        }}
    
    }
}

从类、属性、方法都可以体现面向对象的封装性。

继承:就好像儿子继承父亲的特性一样。在继承中,父类有的字段、属性、方法、构造方法等,子类都可以继承使用,也就是说,我们父类的非私有成员都被子类继承过来,并且也可以对这些成员进行扩展,子类自己也可以定义自己的成员,不过我们类中只能有一个父类,且都可以被他的子类继承,也就是像现实中,我们只有一个父亲,但父亲可以有多个孩子一样。(所有的类都来源于object类,就算只有一个类也一样;继承是具有传递性的。)
还是看例子:
class Program
    {
        static void Main(string[] args)
        {
Teacher p=new Tercher ();
p.Name=”tom”;
p.Age=19;
p.SayHello();
console.readkey();
}}
Class person //定义一个类,被继承的类,父类。
{
Public person(string name,int age) //定义一个构造方法
{
This.name=name;
This.age=age;
}
String name;
Public string Name{set;get}//属性
Int age;
Public int Age{set;get}//属性
Public void SayHello() //定义一个方法
{
Console,WriteLine(“我叫{0},今年{1}岁!”,Name,Age);
}
}
Class Teacher:person //在定义一个类,这个类继承与person类,为继//承类,子类。
{
Public person(string name,int age):base(name,age)//调用基类的构造方
//法。
{
}
Public void SayHello() //定义一个方法
{
Console,WriteLine(“我叫{0},今年{1}岁!”,Name,Age);
}

多态:对于多态,其实也不是很难理解,一个动作,不同的结果,就好像在你床头上有个按钮,刚开始你不清楚,按那个按钮是让她亮灯还是开风扇;主程序编程的时候,使用父类进行编程,具体的实现有子类来实现。不过要实现多态也并不简单,说到父类子类,那至少需要继承吧,而且还得要有子类与父类有同名的、同参数的、完全相同的方法。
例如:
class Program
    {
        static void Main(string[] args)
        {
            //以下同样都有speak这样一个动作,但它们实现的效果并不一样
            person pr = new person("父类", '男', 99);
            pr.Speak();

            teacher th=new teacher("苏老师",'男',34);
            th.Speak();

            student st = new student("李恒权", '男', 23);
            st.Speak();
            Console.ReadKey();

        }
    }

 class person//父类
    {
        //构造方法
        public person(string name, char gender, int age)
        {
            this.name = name;
            this.gender = gender;
            this.age = age;

        }

        private string name;
        public string Name
        {
            get { return name; }
            set { name = value; }
        }

        private char gender;
        public char Gender
        {
            get { return gender; }
            set { gender = value; }
        }

        private int age;
        public int Age
        {
            get { return age; }
            set { age = value; }
        }
        //speak方法,加有virtual就成了虚方法
        public virtual void Speak()
        {
            Console.WriteLine("我是父类,你们都是继承我的!");
        }
    }

class teacher:person//继承person父类
    {
        //继承父类属性
         public teacher(string name, char gender, int age):base(name,gender,age)
        { 
        
        }
        //都是speak方法,但效果与父类的不一样,实现了多态
         public override void Speak()
         {
             Console.WriteLine("我是老师,我上课你们要认真听!");
         }

    }

class student : person//继承person父类
    {
        //继承父类属性
         public student(string name, char gender, int age):base(name,gender,age)
        { 
        
        }
        //都是speak方法,但效果与父类的不一样,实现了多态
         public override void Speak()
         {
             Console.WriteLine("我是学生,上课要认真听老师讲课!");
         }
}
---------------------- <a href="http://edu.csdn.net"target="blank">ASP.Net+Unity开发</a>、<a href="http://edu.csdn.net"target="blank">.Net培训</a>、期待与您交流! ----------------------

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值