C#的继承语法是这样的
class child : father
子类会继承父类的属性和方法。
在菜鸟教程上有一个好例子,我就不客气的挖了过来。
using System;
namespace InheritanceApplication
{
class Shape
{
protected int width;
protected int height;
public void setWidth(int w)
{
width = w;
}
public void setHeight(int h)
{
height = h;
}
}
// 派生类
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();
}
}
}、
在Shape中封装了两个属性,用protected来修饰,表示这两个属性只有该类与它的子类能访问。
你可以看到Rectangle方法在定义的时候,后面加了一个“:Shape”,表示这个类从Shape继承。然后我们又注意到,Rectangle根本没有定义setWidth、setHeight方法,但是为什么创建了Rectangle对象,却有setWidth、setHeight方法。
这就是继承的功劳,子类能够继承基类的部分属性和方法。
C#与Java一样,不支持多继承,支持多重继承。
public Child(double a, double b) : base(a, b){}
假设这个Child是从Father继承的,而base就会指向父类,我们可以用这个关键字来对父类进行初始化操作。
再说说纯虚函数,有点类似Java中接口的方法,纯虚函数在基类中定义了,子类就必须实现。
虚函数的声明是这样的:virtual void Eat(){};
纯虚函数的声明是这样的:virtual void foo2() = 0;
在C++中有虚函数和纯虚函数的概念,在Java中并没有纯虚函数这个概念,Java有接口,但是没有纯虚函数。
public void Test()
{
···
}
public void Test(string id)
{
···
}
public void Test(int id)
{
···
}
这种就叫做方法重载。
在基类中定义了virtual方法,但在派生类中没有重写该虚方法。那么在对派生类实例的调用中,该虚方法使用的是基类定义的方法。
在基类中定义了virtual方法,然后在派生类中使用override重写该方法。那么在对派生类实例的调用中,该虚方法使用的是派生重写的方法。
父类的方法如果用virtual修饰,那么它就是一个虚函数。虚函数可以被重写也可以不重写,重写的方式是在子类同个方法中增加一个override方法。
class Animal
{
public virtual void test()
{
Console.WriteLine("父类方法");
}
}
class Cat : Animal
{
public override void test()
{
Console.WriteLine("子类方法");
}
}
class Test
{
static void Main()
{
Cat cat = new Cat();
cat.test();
}
}
请记住,重写之后,父类的方法就没办法调用了,已经失去了功能了。
class Test
{
static void Main()
{
Animal animal = new Cat();
animal.test();
}
}
class Animal
{
public virtual void test()
{
Console.WriteLine("父类方法");
}
}
class Cat : Animal
{
public new void test()
{
Console.WriteLine("子类方法");
}
}
class Test
{
static void Main()
{
Animal animal = new Cat();
animal.test();
Cat cat = new Cat();
cat.test();
}
}
子类如果想覆盖父类的方法,又或者说,想自己写个同名的方法,但是不想把父类的那个方法被覆盖掉,就可以用new关键字来修饰。
2017/12/15 22:17:03 @Author:云都小生