多态:
继承同一个父类的多个子类各自之间都是独立的,各自的使用都是不同的。
父类中可以出现虚方法,虚方法在子类中通过重写使用。
虚方法:virtual 重写:override
1 class Ren 2 { 3 public void chifan() 4 { 5 Console.WriteLine("我必须得吃饭!"); 6 } 7 8 public virtual void xihuanchi()//虚方法 9 { 10 Console.WriteLine("喜欢吃肉,蔬菜,水果!"); 11 } 12 13 } 14 15 16 class Nan : Ren 17 { 18 public override void xihuanchi()//重写 19 { 20 Console.WriteLine("我是男人,我只喜欢吃肉!"); 21 } 22 23 public void zuqiu() 24 { 25 Console.WriteLine("我喜欢足球!"); 26 } 27 }
父类又称作基类,子类又称作派生类或者超类。
抽象类:abstract
抽象类就是用来被继承的,不能实例化,因为没有构造函数,抽象方法不能有方法主体,只能定义方法的结构。抽象方法或者抽象属性只能存在与抽象类中,但是抽象类中不一定只存在抽象方法和抽象属性。
1 abstract class Ren//抽象类 2 { 3 public virtual void chifan() 4 { 5 Console.WriteLine("用嘴吃饭!"); 6 } 7 8 public abstract void xihuanchi();//抽象方法 9 10 }
接口:
在团队开发中,一个类需要继承多个类,但是父类只能有一个,所以出现了接口。
接口里面的方法很像抽象方法,用interface定义。
1 public interface Sports//接口 2 { 3 void Sport1(); 4 }
is和as运算符:
is是判断是否是某个类型,返回true或者false。
as是转换数据类型,如果转换不成功不会报错,二十返回一个null值。
1 ArrayList arr = new ArrayList(); 2 3 Ren r = new Ren(); 4 5 Random ran = new Random(); 6 7 arr.Add(r); 8 arr.Add(ran); 9 10 foreach (object o in arr) 11 { 12 Ren rr = o as Ren; 13 if (rr != null)//判断是否转换成功 14 { 15 rr.chifan(); 16 } 17 else 18 { 19 Console.WriteLine("没转换成功!"); 20 } 21 } 22 foreach (object o in arr) 23 { 24 Ren rr = o as Ren; 25 if( o is Ren )//判断o在进入集合之前是不是Ren这个类的 26 { 27 rr = o as Ren; 28 } 29 }