前言:
今天跟着师傅学习了一下访问者模式,感觉自己的理论知识基础真的太差了,对计算机的理论研究真的没有到位。今天碰上了这几点知识点,顺带来总结一下了。
继承:(封装、继承和多态)
一开始继承在学习继承、封装和多态的时候进行了一遍理解,今天在进行一遍学习,每一次学习争取都有不同的收获就是成功。继承允许我们根据一个类来定义另一个类,是程序的创建和维护变得更加容易。当创建一个类的时候,程序员不需要完全重新编写数据成员和成员函数,只需设计一个新的类,继承已有类的成员就可以。已有的类称为基类(父类),新的类称为派生类(子类);继承的思想实现了 属于(IS-A) 关系。例如,哺乳动物 属于(IS-A) 动物,狗 属于(IS-A) 哺乳动物,因此狗 属于(IS-A) 动物。
C# 多重继承
多重继承指的是一个类别可以同时从多于一个父类继承行为与特征的功能。与单一继承相对,单一继承指一个类别只可以继承自一个父类。C# 不支持多重继承。但是,可以使用接口来实现多重继承。
以下是基类(图形类)和派生类(矩形类)的实例
namespace InheritanceApplication
{
//父类
class Shape //图形类
{
public void setWidth(int w)
{
width = w;
}
public void setHeight(int h)
{
height = h;
}
protected int width;
protected int height;
}
// 派生类
class Rectangle: Shape//矩形继承图形类
{
public int getArea()
{
return (width * height);
}
}
class RectangleTester
{
static void Main(string[] args) //主窗体
{
Rectangle Rect = new Rectangle();
Rect.setWidth(5);
Rect.setHeight(7);
// 打印对象的面积
Console.WriteLine("总面积: {0}", Rect.getArea());
Console.ReadKey();
}
}
}
子类调用父类中的构造函数
1.实例化父类时,可以通过new子类来实例化父类,执行构造函数的顺序为:先执行父类的构造函数,再执行子类的构造函数。
//父类
class Class1
{
private string name = "Class1";
public Class1()
{
Console.WriteLine( name);
}
}
//子类
class Class2:Class1
{
private string name = "class2";
public Class2()
{
Console.WriteLine(name);
}
}
//子类的子类
class Class3:Class2
{
private string name = "class3";
public Class3()
{
Console.WriteLine(name);
}
}
//主窗体
class Program
{
static void Main(string[] args)
{
Class1 bc = new Class3();
Console.Read();
}
}
输出结果:
2.实例化子类时,只可以new子类,执行顺序同上。
3.父类实例化后,只能执行父类的方法,获得父类的属性等。
4.实例化子类,可同时执行子类和父类的方法和属性,如同名方法,则执行子类的方法。
子类中如果有有参的构造函数,会默认调用父类中无参的构造函数,此时,要在父类中定义一个无参的构造函数。如果想调用父类中有参的构造函数,要在子类中构造函数后面加":base(继承父类的参数)",同时,在子类中构造函数中写自己独有的属性即可。
访问修饰符:(public,private和procted的区别)
可以结合上篇博客进行理解
在父类中定义protected访问修饰符,在子类中可以被调用,而在非子类中则不得调用。