2015-10-28 C#4

五.继承

5.1 父类又称(基类,超类)是被继承的类,子类又称派生类。

5.2 A:B,A就叫子类,B叫父类,B里面所有的成员(字段,方法)都会被A继承。 B里面的私有成员,A也是继承下来了的,只是没有访问权限。

5.3 A:B  B:C ===》A:C

5.4 任何类型的基类是Object类

5.5 使用sealed关键字,其他类无法继承此类,代表密封类 :sealed class Person{}

5.6 A:B B里面有SayHi方法,用A的对象调用SayHi的时候,首先调用的是B里面的构造方法,然后是A的构造方法,最后才是SayHi,如果B上面还有继承的类,则先调用该类的构造方法

5.7 A:B,A和B里面都有一个方法SayHi,默认情况下,运用A的对象调用SayHi的时候,调用的是子类的SayHi,父类的被隐藏了。

注:new:1.实例化对象2.隐藏一个类的方法

5.8 重写/覆写

     A:B,A和B都有一个方法SayHi,当B里面的SayHi方法是一个虚方法(virtual)的时候,A里面的SayHi才能被覆写/重写,通过关键字override重写

ru: public virtual/override void SayHi(){}     

构造函数不能被复写

5.9里氏替换原则:子类对象可以赋值给父类变量,反之不成立

    Person p=new Chinese();√

    A:B,A和B里面都有一个方法SayHi,当 B b=new A(), b.SayHi()默认情况下(没有被覆写)的时候,就近原则调用的是父类。

   如果sayhi被覆写,调用的是子类。

六.多态

6.1  多态分为重载(overload)和覆写(override)

      重载:方法名相同,方法里面的参数个数或者类型不同。

6.2 只有父类的虚方法(virtual)才能被子类覆写,子类实现覆写用关键字override,如果不加override就隐藏了父类的方法(需要加上关键字new,eg: public  new static void aa())

6.3 静态方法不能被覆写,但可以被隐藏

6.4 静态类里面只能有静态成员

6.5 静态的成员不能带override ,virtual ,abstract 

七.接口,抽象类,泛型

7.1 抽象类、抽象方法

      1. abstract +类名,abstract+方法名

      2. 抽象类不能被实例化

      3. 抽象方法的作用是为子类提供一个统一的接口,抽象方面里面只有声明,没有实现

      4. 一个类一旦继承了一个抽象类,就必须实现对该抽象类里面所有的抽象方法的实现

      5. 一个抽象类里面可以有非抽象方法,但是一旦一个类里面有抽象方法,该类就为抽象类了

      6.  抽象方法在声明后用一个;结束,不需要用{}

      7.抽象方法在覆写的时候不需要声明为虚方法

public abstract class Program
{
        public abstract void A();

        public abstract void B();
}
public class C : Program
{
        public override void A()
       {
            Console.WriteLine("China");      
        }

        public override void B()
        {
            Console.WriteLine("nihao");
        }

        public static void Main()
        {
            C me = new C();
            me.A();
        }
 }

7.2接口

          1.  Interface +类名

          2.  接口用来实现多继承,一个类只能有一个父类,但可以继承于多个接口class A :B,C   //类是单继承,接口是多继承

          3.  接口是一种特殊的抽象类,它里面规定得更严格,里面的方法只能为抽象方法

          4.  定义一个接口的时候,一般为缺省,即interface +类名,前面自动加上了public abstract,定义接口中的方法时,也只需要写返回类型 +方法名即可,因为也默认为                        public abstract

          5. 接口里面的所有成员都是公共的,抽象类里面的成员可以是私有的,公共的,受保护的

          6. 一个类继承与一个接口,就必须完成该接口中所有方法的实现

interface Interface1     ///新建接口
{

   void A();
   void B();

}
class Class3:Interface1
{
        public void A()  {
 }

         public void B(){
}

}
posted @ 2015-11-05 20:26  以深  阅读(182)  评论(0编辑  收藏  举报
TOP