虚方法 子类可以重写也可以重写

 

抽象方法

被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 }

 

posted on 2012-12-16 00:19  陈谨  阅读(331)  评论(0编辑  收藏  举报