C# 学习笔记(十四)类、继承、多态

1. 类

1.1 定义类

Class 类名 
{
	// 类的实现
	
	// 成员变量、成员函数等
}

1.2 构造函数

默认的构造函数是不带参数的

Person *p = new Person();

我们可以复写父类的构造方法,以达到我们自己的目的,传递参数等:

using System;

namespace Test
{
    class Person
    {
        public string userName; // 用户名

        public Person(string name)
        {
            Console.WriteLine("对象已创建,name = {0}", name);
            userName = name;
        }
    }

    class Program
    {
        static void Main(string[] args)
        {
            Person p = new Person("张三");
            Console.WriteLine("Person: {0}", p.userName);
        }
    }
}

打印如下:

对象已创建,name = 张三
Person: 张三

Press any key to continue...

1.2 析构函数

这里了解一下析构函数的概念。

// 析构函数
~Person ()
{
		Console.WriteLine("对象已删除");
}

在对象被释放后会执行析构函数。

1.3 静态成员

static 关键字修饰静态成员。

注意:当我们声明一个类成员为静态时,意味着无论有多少个类的对象被创建,只会有一个该静态成员的副本。

关键字 static 意味着类中只有一个该成员的实例。

以下这个程序可以让我们更好的理解什么是静态变量:

using System;

namespace Test
{
    class StaticVar
    {
        public static int num;

        public void cout()
        {
            num++;
        }

        public int getNum()
        {
            return num;
        }
    }

    class Program
    {
        static void Main(string[] args)
        {
            StaticVar v1 =  new StaticVar();
            StaticVar v2 = new StaticVar();
            StaticVar v3 = new StaticVar();

            v1.cout();
            v2.cout();
            v3.cout();

            Console.WriteLine("v1 num: {0}", v1.getNum());
            Console.WriteLine("v2 num: {0}", v2.getNum());
            Console.WriteLine("v3 num: {0}", v3.getNum());
        }
    }
}

打印如下:

v1 num: 3
v2 num: 3
v3 num: 3

Press any key to continue...

也就是说,静态变量是类所属的,对象也只是引用,该变量只有一个。

2.继承和多态

“子类和父类”,“基类和派生类”这种关系。

2.1 继承的定义

class 子类 : 父类  
{
	
}

2.2 理解继承和多态

这里有一个例子:

using System;
namespace Test
{
    class Car
    {
        public string brand; // 品牌
        public string model; // 型号

        // 定义一个run方法。注意C# 中方法名首字母大写。注意这里的virtual。
        public virtual void Run()    
        {
            Console.WriteLine("the car is runing !");
        }
    }

    class Bicycle : Car      // 自行车继承于Car
    {
        // 复写父类方法,父类方法使用virtual修饰,所以这里不会报警告,否则会。
        public override void Run()      
        {
            base.Run(); // 调用父类方法,也可以不调用,这个根据业务逻辑。
            Console.WriteLine("right, bicycle is runing !");
        }
    }

    class Program
    {
        static void Main(string[] args)
        {
            Bicycle b = new Bicycle();
            b.Run();
        }
    }
}

打印如下:

the car is runing !
right, bicycle is runing !

Press any key to continue...

Bicycle继承于Car,继承了父类的方法Run(),并通过重写这个方法,表现出不同形式,这就是多态。

Bicycle能继承父类的public的变量、方法。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章