继承
继承是面向对象程序设计中最重要的概念之一。继承允许我们根据一个类来定义另一个类,这使得创建和维护应用程序变得更容易。同时也有利于重用代码和节省开发时间。
当创建一个类时,程序员不需要完全重新编写新的数据成员和成员函数,只需要设计一个新的类,继承了已有的类的成员即可。这个已有的类被称为的基类/父类/超类,这个新的类被称为派生类/子类。
特性:
1.一个类只可以直接继承一个基类。
2.派生类拥有基类的所有属性和方法。
3.基类的成员不允许子类访问,子类是无法访问到的。
4.子类会默认调用父类的默认构造函数。
5.如果父类的默认构造函数失效,子类需要重新指定(使用base)。
6.如果你的类没有父类,将默认继承Object类。
声明格式:
访问修饰 class 派生类名:基类名{
}
应用例子:
class Person{
public string name;
public int age;
public string sex;
public void SayHello(){
Console.WriteLine("我的名字叫{0},今年{1}岁了,性别是{2}",name,age,sex);
}
}
class Student:Person{
public int csharp;
public int unity;
public void GetScore(){
Console.WriteLine("{0}的总分为{1}",name,csharp+unity);
}
继承的从属关系
例:
上图Person是Teather的基类;Teather是ChineseTeather的基类;Person同样是ChineseTeather的基类。
继承的便捷性
对于大部分属性相同的多个类,若全部单独编写,将会造成一定程序的代码重复(冗余),此时我们可以抽象出他们的共同点建立一个基类,将其共有的属性和方法放置在基类中,可以很好的解决代码冗余问题。
Object类
C#中所有类的最终基类都是Object类
练习:
记者(reporter):我是阿仔,男,我今年34了,爱好拍照。有两个方法:拍照和自我介绍
司机(driver):我叫张三 男 我43岁了,爱好打篮球。有两个方法 打篮球和自我介绍
程序员(programmer):我叫李四,男,我23,喜欢看电影,有两个方法,看电影和自我介绍
抽象出上面三个类的基类,并在基类的构造函数中打印我是基类。
static void Main(string[] args)
{
Reporter r=new Reporter();
r.name = "阿仔";
r.sex = "男";
r.age = 34;
r.hobby = "拍照";
Driver d=new Driver();
d.name = "张三";
d.sex = "男";
d.age = 43;
d.hobby = "打篮球";
Programmer p=new Programmer();
p.name = "李四";
p.sex = "男";
p.age = 23;
p.hobby = "看电影";
r.Introduce();
d.Introduce();
p.Introduce();
r.TakePhoto();
d.PlayBasketBall();
p.WatchMovie();
}
class Person
{
public string name;
public int age;
public string sex;
public string hobby;
public Person()
{
Console.WriteLine("我是基类");
}
public void Introduce()
{
Console.WriteLine("我叫{0},今年{1}岁了,性别为{2},爱好是
{3}",name,age,sex,hobby);
}
}
class Reporter : Person
{
public void TakePhoto()
{
Console.WriteLine("{0}在拍照", name);
}
}
class Driver : Person
{
public void PlayBasketBall()
{
Console.WriteLine("{0}在打篮球", name);
}
}
class Programmer : Person
{
public void WatchMovie()
{
Console.WriteLine("{0}在看电影", name);
}
}
访问修饰符
public公开的 private私有的 protected继承 internal本程序集(类的默认访问修饰符)
引用其他程序集,使用using关键字
也可以直接通过dot语法,找到对应的命名空间.类名。
命名空间
同一命名空间下的东西不能重名,可以直接调用。
不同命名空间下的类可以重名,所以可以用命名空间来区分不同的代码。
该系列专栏为网课课程笔记,仅用于学习参考。