一、类的继承
1.类成员的“纵向扩展”(成员越来越多)
2.类成员的“纵向扩展”(行为改变,版本增高)
例
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ConsoleApp49
{
class Program
{
static void Main(string[] args)
{
Car car = new Car();
car.Run();//car is running!
Vehicle vehicle = new Vehicle();
vehicle.Run();//I'm running!
}
}
class Vehicle
{
public virtual void Run()
{
Console.WriteLine("I'm running!");
}
}
class Car : Vehicle
{
public override void Run()
{
Console.WriteLine("Car is running !");
}
}
}
//小结
//若子类要重写父类的方法,需要在父类的方法里面加上‘visual’,重写的方法里加‘override’
3.类成员的隐藏(不常用)
例:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ConsoleApp49
{
class Program
{
static void Main(string[] args)
{
Vehicle v = new Car();
v.Run();//I'm running !
}
}
class Vehicle
{
public void Run()
{
Console.WriteLine("I'm running!");
}
}
class Car : Vehicle
{
public void Run()
{
Console.WriteLine("Car is running !");
}
}
}
//小结
//不加'visual'和'override'就是隐藏;基本不用,了解就可以了
4.重写与隐藏的发生条件:函数成员可见,而且签名一致
二、多态(polymorphism)
1.基于重写机制(visual→override)
例:方法重写
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ConsoleApp49
{
class Program
{
static void Main(string[] args)
{
Vehicle v= new RaceCar();
v.Run();//Racecar is running !
RaceCar raceCar = new RaceCar();
raceCar.Run();//Racecar is running !
//多态
//当我们用一个父类的变量引用一个子类的实例时,当你调用一个被重写的成员时,总是能调到最新的版本
}
}
class Vehicle
{
public virtual void Run()
{
Console.WriteLine("I'm running!");
}
}
class Car : Vehicle
{
public override void Run()
{
Console.WriteLine("Car is running !");
}
}
class RaceCar:Car
{
public override void Run()
{
Console.WriteLine("Race car is running");
}
}
}
2.函数成员的具体行为(版本)由对象决定
3.回顾:C#语言的变量和对象都是有类型的,所以会有“代差”
例:
Vehicle raceCar = new RaceCar();
//交通工具包含赛车
//但是不能反过来下来写
RaceCar vehicle = new Vehicle();
//任何交通工具都是赛车 错误