面相对象

继承

预计阅读时间2 分钟 6 views

前言

在C#中,继承是一种创建新类的机制,通过它可以从现有类派生出新的类。继承是面向对象编程(OOP)的核心特性之一。

作用

  • 代码重用:通过继承,子类可以重用父类的字段和方法,从而避免重复代码。
  • 增强代码组织:继承有助于将代码组织成更具层次性的结构,使得代码更加清晰易懂。
  • 实现多态:通过继承,可以实现多态性,使得对象可以以父类的形式出现,同时使用子类的方法和属性。

使用场景

  • 扩展功能:当需要在现有类的基础上添加新的功能时,可以通过继承来实现。
  • 实现多态:在需要通过统一接口调用不同子类的方法时,使用继承可以实现多态性。
  • 代码组织:在设计复杂系统时,通过继承可以将相关的类组织成层次结构,便于管理和维护。

示例

示例 1: 基础的继承示例

using System;

namespace Inheritance {
    // 基类
    class Animal {
        public string name;

        public void Display() {
            Console.WriteLine("我是一只动物");
        }
    }

    // 派生类
    class Dog : Animal {
        public void GetName() {
            Console.WriteLine("我的名字是 " + name);
        }
    }

    class Program {
        static void Main(string[] args) {
            // 创建派生类对象
            Dog labrador = new Dog();

            // 访问基类的字段和方法
            labrador.name = "Rohu";
            labrador.Display();

            // 访问派生类的方法
            labrador.GetName();

            Console.ReadLine();
        }
    }
}

输出

我是一只动物
我的名字是 Rohu

在上述示例中,我们从 Animal 类派生出 Dog 类。Dog 类可以访问 Animal 类的字段 name 和方法 Display(),同时还定义了自己的方法 GetName()

示例 2: 受保护成员的访问

using System;

namespace Inheritance {
    // 基类
    class Animal {
        protected void Eat() {
            Console.WriteLine("我可以吃东西");
        }
    }

    // 派生类
    class Dog : Animal {
        static void Main(string[] args) {
            Dog labrador = new Dog();

            // 访问基类的受保护方法
            labrador.Eat();

            Console.ReadLine();
        }
    }
}

输出

我可以吃东西

在这个示例中,Animal 类包含一个受保护的方法 Eat()。我们从 Animal 类派生出 Dog 类,并在 Dog 类中访问了 Eat() 方法。

继承的类型

继承可以分为以下几种类型:

  1. 单继承
    在单继承中,一个派生类从一个基类继承。
   class Animal { }
   class Dog : Animal { }
  1. 多层继承
    在多层继承中,一个派生类继承自一个基类,而这个派生类又作为另一个类的基类。
   class Animal { }
   class Mammal : Animal { }
   class Dog : Mammal { }
  1. 层次继承
    在层次继承中,多个派生类从同一个基类继承。
   class Animal { }
   class Dog : Animal { }
   class Cat : Animal { }
  1. 多重继承
    多重继承指的是一个派生类继承自多个基类。C# 不支持多重继承,但可以通过接口实现类似功能。
   interface IA { }
   interface IB { }
   class C : IA, IB { }
  1. 混合继承
    混合继承是多种继承类型的组合,例如多层继承和层次继承的组合。
   class Animal { }
   class Mammal : Animal { }
   class Dog : Mammal { }
   class Cat : Mammal { }

方法重写

如果基类和派生类中都有同名的方法,派生类的方法会覆盖基类中的方法,这叫做方法重写。

using System;

namespace Inheritance {
    // 基类
    class Animal {
        public virtual void Eat() {
            Console.WriteLine("我吃食物");
        }
    }

    // 派生类
    class Dog : Animal {
        public override void Eat() {
            Console.WriteLine("我吃狗粮");
        }
    }

    class Program {
        static void Main(string[] args) {
            Dog labrador = new Dog();
            labrador.Eat();
        }
    }
}

输出

我吃狗粮

在此示例中,Eat() 方法在 Animal 类中被声明为 virtual,在 Dog 类中被重写为 override。当调用 Dog 类的 Eat() 方法时,实际执行的是 Dog 类中的实现。

base 关键字

如果我们在派生类中重写了基类的方法,但仍想调用基类中的实现,可以使用 base 关键字。

using System;

namespace Inheritance {
    // 基类
    class Animal {
        public virtual void Eat() {
            Console.WriteLine("动物吃食物");
        }
    }

    // 派生类
    class Dog : Animal {
        public override void Eat() {
            base.Eat();
            Console.WriteLine("狗吃狗粮");
        }
    }

    class Program {
        static void Main(string[] args) {
            Dog labrador = new Dog();
            labrador.Eat();
        }
    }
}

输出

动物吃食物
狗吃狗粮

在上述示例中,我们使用 base.Eat() 调用了 Animal 类中的 Eat() 方法,然后在 Dog 类中添加了额外的行为。

结语

继承是面向对象编程中的重要特性,它允许我们在现有类的基础上创建新类,并重用已有代码。通过继承,我们可以创建具有层次结构的类,提升代码的复用性和组织性。同时,继承也支持多态性,使得我们可以以统一的方式处理不同的对象。理解并正确使用继承,有助于设计更为高效和易于维护的代码。

Leave a Comment

分享此文档

继承

或复制链接

内容