====上一章《c#面向对象》
1、方法的重载:是让类以统一的方式处理不同类型数据的一种手段。(构造方法也可以重载)
【实现】:在类中创建多个名字相同但参数和实现不同的方法。
【调用】:方法的调用通常通过方法名来实现,由于调用重载方法时方法名相同,此时的调用主要取决于方法参数。
【条件】:⑴、在同一个类中;
⑵、具有相同的方法名;
⑶、具有不同的参数。
【举例】:class Computer
{
public static int Add(int num1,int num2) //方法1
{
return num1+num2;
}
public static double Add(double num1,double num2) //方法2
{
return num1+num2;
}
public static int Add(int num1,int num2,int num3) //方法3
{
return num1+num2+num3;
}
}
public static void Main (String [] args)
{
Console.WriteLine(Computer.App(1,2)); //调用方法1
Console.WriteLine(Computer.App(1.0,2.0)); //调用方法2
Console.WriteLine(Computer.App(1,2,3)); //调用方法3
}
2、多态:(多个子类对同一个方法的不同表现)
(例:动物类里的叫声,狗继承后是“汪汪”,猫继承后是“喵喵”)
我们都知道:子类继承父类时,会获得父类的方法、字段、属性。
那么要更改父类的数据和行为需要怎么做呢?
⑴、使用新的子类成员替换父类的成员(方法隐藏)
⑵、重写虚拟的父类成员(方法重写)
2.1、方法重写:为了子类能够重写其父类方法,父类必须声明该成员为虚拟,通过virtual关键字实现,子类通过使用Override关键字重写父类实现。
【举例】:public class Animal
{
……
public vritual void Bark() //虚拟方法
{
Console.WriteLine(“呜呜!”);
}
}
public class Cat:Animal
{
……
public override void Bark() //重写方法
{
Console.WriteLine(“喵喵!”);
}
}
class Program
{
static void Main(string [] args)
{
Cat cat=new Cat("Jerry",2);
cat.Bark();//调用cat类的Bark方法
Animal animal=new Animal("Tom",1);
animal.Bark();//调用Animal类的Bark方法
Animal animalJack=new Cat("Tack",1);
animalJack.Bark();//调用Cat类的Bark方法
}
}
【结果】:Hello Animal!
Hello Cat!
喵喵!
Hello Animal!
呜呜!
Hello Animal!
Hello Cat!
喵喵!
【注意】:1、重写方法与被重写方法的访问修饰符、返回值类型、方法名称和参数必须一致。
2、调用重写方法时,调用那个方法取决于其具体的使用对象,即父类与子类分别调用各自的方法。
2.2、方法隐藏:使用new关键字可以实现新的子类成员替换原有的父类成员。(在隐藏方法中,调用那个方法取决于被引用的对象)
(如果父类中已经定义了一个方法,则可以在子类中使用new关键字隐藏父类的实现,从而重新定义。)
【举例】:public class Animal
{
……
public void Bark()
{
Console.WriteLine(“呜呜!”);
}
}
public class Cat:Animal
{
……
public new void Bark() //隐藏父类的Bark方法
{
Console.WriteLine(“喵喵!”);
}
}
class Program
{
static void Main(string [] args)
{
Cat cat=new Cat("Jerry",2);
cat.Bark();//调用cat类的Bark方法
Animal animal=new Animal("Tom",1);
animal.Bark();//调用Animal类的Bark方法
Animal animalJack=new Cat("Tack",1);
animalJack.Bark();//调用Animal类的Bark方法
}
}
【结果】:Hello Animal!
Hello Cat!
喵喵!
Hello Animal!
呜呜!
Hello Animal!
Hello Cat!
呜呜!
3、sealed关键字:可以修饰类和方法。
⑴、密封类:通过sealed修饰的类。(密封类无法被继承)
【语法】:sealed class ClassName
{
……
}
⑵、密封方法:sealed修饰方法时只能和override一起使用,用于防止重写方法再次被重写。
【举例】:
public class Animal
{
……
public virtual void Bark()
{
Console.WriteLine(“呜呜!”);
}
}
public class Cat:Animal
{
……
public sealed override void Bark() //密封方法,无法再被重写
{
Console.WriteLine(“喵喵!”);
}
}