面向对象有三大特征:封装、继承、多态。所谓的继承就是“子承父业”,父有的东西也会继承到子那里。表现在代码里就是:
第1步,假如现在有一个Person.cs类:
class Person
{
public string Name { get; set; }
public int age { get; set; }
}
第2步,现在声明一个Teacher.cs类,代码如下:
class Teacher : Person
{
}
如代码演示的,在Teacher后用冒号跟上Person,表示Teacher类继承自Person类。
第3步,直接在主函数声明Teacher类的对象:
class Program
{
static void Main(string[] args)
{
Teacher tea = new Teacher();
tea.Name = "诚老师";
tea.age = 26;
Console.WriteLine("这个老师叫{0},已经{1}岁了", tea.Name, tea.age);
Console.ReadKey();
}
}
可以发现,虽然在Teacher类中并没有写任何属性,却可以调用到Name和age属性,实际上这就是继承带来的好处。继承可以让父类的东西被子类拥有,但父类的构造函数是不能继承给子类的。
父类一般也叫基类,子类也叫派生类。这更加能说明子类是从父类那儿发展出来,并派生出来的新类,拥有父类的样貌,又可以有着自己特有的样貌。继承需要注意几件事情:
1.继承是可以传递的。如果B类继承自A类,C类又继承自B类,那么C类就拥有了A类和B类的成员。2.Object类是所有类的基类。
3.构造函数和析构函数不能被继承。除此以外的其他成员都可以被继承。父类中成员的访问方式只是决定子类是否能够访问它们。
4.子类如果定义了与继承的成员同名的新成员,那么就可以覆盖已继承的成员。但子类的成员依然存在,不是被删除了,只是不能再访问到。
5.类可以定义虚方法、虚属性以及虚索引指示器,它的派生类可以重载这些成员,从而体现出多态的特征。
6.子类只能从一个父类继承,不可以同时继承两个父类,但可以继承多个接口。因此如果有需要继承多个类的时候,可以尝试用接口来代替。
7.继承的特性:①单根性、一个子类只能有一个父类;②传递性。
8.子类并没有继承父类的构造函数,但是子类会默认调用父类无参数的构造函数,创建父类对象,让子类可以使用父类中的成员。所以,如果在父类中重写了一个有参数的构造函数之后,那个无参数的就没用了,子类就无法调用了,所以子类会报错。
解决方法:①在父类中重新写一个无参数的构造函数。②在子类中显示调用父类的构造函数,使用base。
9.在C#中,默认所有类都直接或间接继承object类。
第1步,假如现在有一个Person.cs类:
class Person
{
public string Name { get; set; }
public int age { get; set; }
}
第2步,现在声明一个Teacher.cs类,代码如下:
class Teacher : Person
{
}
如代码演示的,在Teacher后用冒号跟上Person,表示Teacher类继承自Person类。
第3步,直接在主函数声明Teacher类的对象:
class Program
{
static void Main(string[] args)
{
Teacher tea = new Teacher();
tea.Name = "诚老师";
tea.age = 26;
Console.WriteLine("这个老师叫{0},已经{1}岁了", tea.Name, tea.age);
Console.ReadKey();
}
}
可以发现,虽然在Teacher类中并没有写任何属性,却可以调用到Name和age属性,实际上这就是继承带来的好处。继承可以让父类的东西被子类拥有,但父类的构造函数是不能继承给子类的。
父类一般也叫基类,子类也叫派生类。这更加能说明子类是从父类那儿发展出来,并派生出来的新类,拥有父类的样貌,又可以有着自己特有的样貌。继承需要注意几件事情:
1.继承是可以传递的。如果B类继承自A类,C类又继承自B类,那么C类就拥有了A类和B类的成员。2.Object类是所有类的基类。
3.构造函数和析构函数不能被继承。除此以外的其他成员都可以被继承。父类中成员的访问方式只是决定子类是否能够访问它们。
4.子类如果定义了与继承的成员同名的新成员,那么就可以覆盖已继承的成员。但子类的成员依然存在,不是被删除了,只是不能再访问到。
5.类可以定义虚方法、虚属性以及虚索引指示器,它的派生类可以重载这些成员,从而体现出多态的特征。
6.子类只能从一个父类继承,不可以同时继承两个父类,但可以继承多个接口。因此如果有需要继承多个类的时候,可以尝试用接口来代替。
7.继承的特性:①单根性、一个子类只能有一个父类;②传递性。
8.子类并没有继承父类的构造函数,但是子类会默认调用父类无参数的构造函数,创建父类对象,让子类可以使用父类中的成员。所以,如果在父类中重写了一个有参数的构造函数之后,那个无参数的就没用了,子类就无法调用了,所以子类会报错。
解决方法:①在父类中重新写一个无参数的构造函数。②在子类中显示调用父类的构造函数,使用base。
9.在C#中,默认所有类都直接或间接继承object类。