虚方法 子类可以重写也可以重写
抽象方法
被abstract修饰的方法叫做抽象方法,子类必须要重写父类的抽象方法,除非子类也是抽象类
抽象类可以继承,如果子类继承抽象类,子类要实现父抽象类的所有抽象方法(包括父父抽象类等的抽象方法),抽象方法实现至少一次就可以啦,可以在抽象类里面是想父抽象类的抽象方法,重写之后可以再重写,调用相对最后一个
抽象方法不能有方法体
抽象方法必须在抽象类中
快捷ctrl+. 或者在右键
抽象类不能实例化,抽象类中的抽象方法没有实现,调用会出错
抽象类可以与有非抽象成成员
子类必须要重写的时候,每个子类的的实现方法不一样就用就用抽象方法
如果要实例化父类就用虚方法
抽象方法不能是private因为你是private’子类无法继承,无法继承就无法重写
签名必须一致
重写基类方法一样可以调用父类的方法(依然存在,只是访问不了)
抽象类可以有非抽象成员
抽象类可以有构造函数,以为构造函数要被子类实现
抽象类自能用于基类,不能实例化
抽象方法或者虚方法不能标记为静态成员
虚方法与抽象方法的区别
1 virtua abstract
2虚方法必须有方法体,抽象方法必须没有方法体
3虚方法可以重写可以不重写,抽象方法子类必须重写 除非子类也是一个抽象类
4抽象方法必须在抽象类中,虚方法除了密封类都可以重写
5抽象类不能实例化 抽象方法和虚方法都不可以是private
如何判断1个类是否是另外一个类的子类Is a
View Code
1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5 using System.Threading.Tasks; 6 7 namespace 抽象方法_电器 8 { 9 class Program 10 { 11 static void Main(string[] args) 12 { 13 Person ps = new Person(); 14 //ps.LetMachineRun(new Machine()); 15 ps.LetMachineRun(new Fridge()); 16 Console.ReadKey(); 17 } 18 } 19 abstract class Machine 20 { 21 public int ii = 2; 22 public abstract void Run(); 23 public void Test() 24 { 25 Console.WriteLine(""); 26 } 27 public Machine() 28 { 29 Console.WriteLine("3333"); 30 } 31 32 33 } 34 class Fridge : Machine 35 { 36 public override void Run() 37 { 38 Console.WriteLine(base.ii); 39 Console.WriteLine("电冰箱在运行"); 40 } 41 } 42 class TV : Machine 43 { 44 public override void Run() 45 { 46 Console.WriteLine("电视机在运行"); 47 } 48 } 49 class DV : Machine 50 { 51 public override void Run() 52 { 53 Console.WriteLine("DV机在运行"); 54 } 55 } 56 class Person 57 { 58 public virtual void LetMachineRun(Machine mc) 59 { 60 mc.Run(); 61 } 62 } 63 }
View Code
1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5 using System.Threading.Tasks; 6 7 namespace 家用电器运行 8 { 9 class Program 10 { 11 static void Main(string[] args) 12 { 13 Person ps = new Person(); 14 ps.LetMachineRun(new Fridge()); 15 Console.ReadKey(); 16 } 17 } 18 class Machine 19 { 20 public virtual void Run() 21 { 22 Console.WriteLine("未知机器在运行"); 23 } 24 } 25 class Fridge : Machine 26 { 27 public override void Run() 28 { 29 Console.WriteLine("电冰箱在运行"); 30 } 31 } 32 class TV : Machine 33 { 34 public override void Run() 35 { 36 Console.WriteLine("电视机在运行"); 37 } 38 } 39 class Person 40 { 41 public virtual void LetMachineRun(Machine mc) 42 { 43 mc.Run(); 44 } 45 } 46 }