学习C#之面向对象

面向对象三大特性:继承、封装、多态

一、封装

  • 要求字段尽量不要对无关的类型开放权限,函数若外部需要访问则开为可访问权限,否则也设为封闭权限。
  • 一个类型相关的操作,尽可能的封装在类型内部。

二、继承

  • 一个类可以派生(继承)自另一个类,也可以派生出任意多个子类(派生类)。

  • 子类可以继承(直接访问)基类(父类)中除私有访问权限之外的任何成员。

  • C#是单继承语言,一个类只能有一个基类,但是可以派生出任意多个子类。

  • 使用场景:当多个类中存在任意多相同和不同的成员,我们可以把多个类中相同的部分抽象出来封装到单独的一个类中,然后让原本的多个类继承自该类。

  • 作用:就是当派生类(子类)继承自基类(父类)之后,派生类或其派生类的对象可以直接访问基类有派生权限的成员,但是这些成员都在基类中声明实现。

  • 派生层级可以有任意多层,从基类继承过来的成员就相当于自身的成员,可以继续派生给自己的子类。

  • 基类中也可以有独有的部分,即私有成员。

  • 所有类都存在继承关系,若没有显式继承自某个基类,则默认继承自object对象类,对象类是.net框架中所有类的最终基类。

class Animal:Object 
{
    //受保护访问权限:protected。只有自身和子类可以访问,其他地方均不可访问
    protected string name;    //姓名
    protected string sex;     //性别
    protected int age;    //年龄
    protected double weight;  //体重
    public void Eat()
    {
        Console.WriteLine("吃饭");
    }
    public void Sleep()
    {
        Console.WriteLine("睡觉");
    }
}

//继承样式: 类名之后:基类名称  
//基类只能有一个
class Dog:Animal 
{
    string size;   //大小
    public void Run() 
    {
        size = "小";
        name = "小白";
        sex = "公";
        age = 2;
        weight = 5;

        Console.WriteLine("跑步");
        Eat();
        Sleep();
    }
}

class SmallDog : Dog 
{
    public void Dark() 
    {
        name = "爱丽丝";
        sex = "女";
        age = 1;
        weight = 3;

        Run();
        Eat();
        Sleep();
        Console.WriteLine("叫");
    }
}

class Fish:Animal 
{
    //类中的成员默认的是私有权限
    double lenght;  //长度

    public void Swim()
    {
        Console.WriteLine("游");
    }
}

class Bird:Animal
{
    public void Fly()
    {
        Console.WriteLine("飞");
    }
}

class Program
{
    static void Main(string[] args)
    {
        Program pro = new Program();
        pro.Test();

        Dog dog = new Dog();
        dog.Run();
        dog.Eat();
        dog.Sleep();

        Fish fish = new Fish();
        fish.Swim();
        fish.Eat();
        fish.Sleep();

        Console.ReadKey();
    }

    public void Test() 
    {
        Animal animal = new Animal();
        animal.Eat();
        animal.Sleep();
    }
}

三、多态

  • 作用:基类的引用可以接收指向子类的对象,简化代码处理

  • 代码体现:声明基类引用变量可以接收子类对象。接收子类对象的基类引用,用来指代子类对象时,只能访问子类从基类继承的成员,子类独有的成员不能通过基类引用访问。

class Animal
{
    public void Eat() 
    {
        Console.WriteLine("吃饭");
    }
}

class Dog :Animal
{
    public void Run() 
    {
        Console.WriteLine("小狗跑了");
    }
}

class Cat : Animal 
{
    public void Sleep() 
    {
        Console.WriteLine("小猫睡觉");
    }
}

class Program
{
    static void Main(string[] args)
    {
        Animal[] aniArray = new Animal[] { new Animal(), new Dog(), new Cat(), new Cat()};
        CallEat(new Dog());
        CallEat(new Animal());
        CallEat(new Cat());

        Animal anima00 = new Dog();
        anima00.Eat();
        ((Dog)anima00).Run();

        Console.ReadKey();
    }

    static void CallEat(Animal animal) 
    {
        animal.Eat();
    }
}

你可能感兴趣的:(C#学习)