【C#】面向对象三大特征

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/wzh66888/article/details/81583896

前言

验项目那天师父问我,面向对象三大特征都有什么呀?“封装、继承、多态”。那分别讲一讲这三大特征吧!我:“enmmmmm……”

确实是这样,要我真的说出来的话,我说不出来,我不能够很好地描述出来,于是我准备在学习一遍。

封装

封装是指将对象的信息进行隐藏,使它的使用者无法看到,而只是提供一个访问接口。在类中,通过不同的修饰符能让类的成员实现公开或隐藏。通过这些修饰符,类实现了很好的封装。封装的主要用途是防止数据收到意外破坏。代码如下:

class Test
    {
        private int a;
        public int wr()
        {
            return a;
        }
        public void rd(int value)
        {
            a = value;
        }
    }
class Program
    {
        static void Main(string[] args)
        {
            Test ts = new Test();
            ts.rd(3);
            ts.wr();
        }
    }

以上代码中,使Test类中的私有字段被访问,但又很好地保护了它的数据不被破坏。

当然,封装的内容远不止这些,但是思想是一致的。我们应该注意思想的学习,这样才能很好得应用封装操作。

继承

继承是指一个类A能利用另一个类B的资源(包括属性和方法等),其中类A被称为基类(或父类),而类B被称为派生类(或子类)。继承的用法如下:

class classA
    {
        public A {}
    }
class classB : A
    {
        public B {}
    }

如果类B继承于类A,那么类B能否访问类A中的全部成员呢?答案是否定的。这也是以下要说明的有关派生类在基类中的访问权限问题。

  1. 大多数而非所有的类都可以作为基类被继承,如带有sealed修饰符的密封类。
  2. 基类中只有两种成员能够被派生类访问,包括public和protected类型的成员。其中protected类型是专为派生类设计的,该类型的成员只能在派生类中进行访问。
  3. 在派生类中可以修改基类中的以下成员,包括虚拟成员(virtual)和抽象成员(abstract)。其中对虚拟成员的修改是在派生类中重写该成员的执行代码;而对于抽象成员而言,它在基类中没有执行代码,需要在派生类中进行添加。

下面通过一个简单的例子进行说明,代码如下:

class classF
    {
        //公有字段
        public string name = "张三";
        public string age;
        //公有属性
        public string Age
        {
            get { return age; }
            set { age = value; }
        }
    }
    //虚拟方法
    public virtual double Income(double time)
    {
        double income = time * 100.0 + 2000.0;
        return income;
    }

在基类F中,定义了一个公有字段、一个公有属性和一个虚拟方法。以下是派生类ClassS的代码。

class ClassS:classF
    {
        //重写虚拟方法
        public override double Income(double time)
        {
            double income = time * 100.0 + 3000.0;
            return income;
        }
    }

客户端代码

static void Main(string[] args)
        {          
            ClassS c = new ClassS();
            Console.WriteLine("姓名:");
            //继承公有字段
            Console.WriteLine(cs.name);
            Console.WriteLine("工时:");
            //继承公有属性
            cs.Age = Console.ReadKey();
            Console.WriteLine("工资:");
            //继承虚拟方法
            Console.WriteLine(cs.Income(Convert.ToDouble(cs.Age)).ToString);
            Console.ReadKey();
     }

在派生类ClassS中,调用了ClassF类中的公有字段name、公有属性Age,并重写了虚拟方法Income()。需要注意的是,重写虚拟方法需要用到override关键字。运行程序,结果如下。

扫描二维码关注公众号,回复: 3752253 查看本文章
姓名:
张三
工时:
30
工资:
6000

多态

多态是面向对象的又一个重要特征,它主要是指同一操作(如方法)作用于不同的类的实例,将产生不同的结果。多态主要是通过在派生类中对基类中的成员进行替换或重定义完成。

下面通过栗子进行说明,代码如下:

//基类
    class ClassF1
    {
        public virtual void Out()
        {
            Console.WriteLine("调用了基类中的方法!");
        }
    }
//派生类1
    class ClassS1:ClassF1
    {
        public override void Out()
    	   {
        	Console.WriteLine("调用了派生类1中的方法!");
    	   }
    }
class ClassS2:ClassF1
    {
        public override void Out()
        {
            Console.WriteLine(""调用了派生类2中的方法!);
        }
     }
//输出结果
        static void Main(string[] args)
        {
            ClassF1[] cf = new ClassF1[3];
            cf[0] = new ClassF1();
            cf[1] = new ClassS1();
            cf[2] = new ClassS2();
            foreach (ClassF1 c in cf)
            {
                c.Out();
            }
            Console.ReadKey();
        }

以上代码演示了多态性的实现过程,通过在两个派生类中重写基类中的虚拟方实现。

运行结果

调用了基类中的方法!
调用了派生类1中的方法!
调用了派生类2中的方法!

如果要在派生类中隐藏基类中的非虚成员,可以使用new关键字。

多态的主要作用是提高代码的重用性和简化程序结构。

猜你喜欢

转载自blog.csdn.net/wzh66888/article/details/81583896