zoukankan      html  css  js  c++  java
  • ASP.NET动态网站制作(21)-- C#(4)

    前言:这节课是C#讲解的第四节课,主要围绕面向对象的三大特性展开。上节课已经把封装讲完了,这节课讲继承和多态。

    内容

      1.继承:写程序的时候有些信息是公共的,可以将这些公共的信息写在父类里,增强代码的可复用性。

        (1)class A : B,被继承的类称为基类或父类或超类,而继承得到的类称为子类或派生类。子类继承超类的状态和行为(字段和方法),同时也可以具有自己的特征。父类里面的私有成员,子类也是继承了的,只是没有访问权限,就像不知道密码的保险箱一样。

        (2)A:B,B:C,则A:C。

        (3)任何类型的基类是object类型。

        (4)当一个类是密封类(sealed),它是不能被继承的。

        (5)A:B,B里面有sayHi(),用A的实例化对象调用sayHi()的时候,首先调用的是B里面的构造方法,然后是A的构造方法,最后才是sayHi(),如果B上面还有继承的类,则先调用该类的构造方法。如:

    Animal类:

    1 class Animal
    2     {
    3         public Animal()
    4         {
    5             Console.WriteLine("我是动物,我出生了");
    6         }
    7     }

    Person类:

     1 class Person:Animal
     2     {
     3         public int age;
     4         public string name;
     5 
     6         public Person()
     7         {
     8             Console.WriteLine("我是人类,我出生了");
     9         }
    10         public void SayHi()
    11         {
    12             Console.WriteLine("大家好,我是人类");
    13         }
    14     }

    Chinese类:

    1 class Chinese:Person
    2     {
    3         public Chinese()
    4         {
    5             Console.WriteLine("我是中国人,我出生了");
    6         }
    7     }

    其中:Chinese:Person,Person:Animal。

    1 class Program
    2     {
    3         static void Main(string[] args)
    4         {
    5             Chinese c = new Chinese();
    6             c.SayHi();
    7             Console.ReadKey();
    8         }
    9     }

    运行结果为:

        (6)如果子类和父类里有相同名称的方法,若子类对象调用该方法,则父类中的同名方法将被隐藏。可使用new修饰同名方法而达到隐藏父类同名方法的目的。

        (7)一个父类的方法如果要被子类覆写,则父类需声明为virtual类型。子类继承后使用override修饰该方法。如在父类中:public virtual void SayHi(),在子类中:public override void SayHi()。

        (8)里氏替换原则:子类对象可以赋值给父类对象:Person p = new Chinese(),反之不成立。

        (9)如果A:B,A、B里面都有一个方法叫SayHi(),B b = new A(),当b调用SayHi()时,默认情况下(即没有被复写),则采用就近原则,即调用 B的SayHi()。如果SayHi()被覆写,则调用子类的SayHi()。

      2.多态:同一种方法名,但是有不同的实现形式。多态分为重载(overload)和覆写(override)。

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

        (2)只有父类的虚方法(virtual)才能被子类覆写,子类覆写用关键字override。如果不加override就隐藏了父类的方法(需加关键字new)。

        (3)静态方法不能被覆写,但可以被隐藏。

        (4)静态类里面只能有静态成员。

        (5)静态成员不能带override,virtual,abstract。

      3.抽象类、抽象方法:abstract + 类名、abstract + 方法名

        (1)抽象类不能被实例化。

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

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

        (4)一个抽象类里面可以有非抽象方法,但是一旦一个类里面有抽象方法,该类就为抽象类了。

        (5)抽象方法在声明后用一个;结束,不需要用{}。

        (6)抽象方法在覆写的时候不需要声明为虚方法。

     1 public abstract class Program
     2 {
     3     public abstract void A();
     4     public abstract void B();
     5 }
     6 public class C : Program
     7 {
     8     public override void A()
     9     {
    10         Console.WriteLine("China");     
    11     }
    12     public override void B()
    13     {
    14         Console.WriteLine("Hello");
    15     }
    16     public static void Main()
    17     {
    18         C me = new C();
    19         me.A();
    20     }
    21 }

      4.接口:Interface + 类名

        (1)接口用来实现多继承,一个类只能有一个父类,但可以继承多个接口。

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

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

        (4)接口里面的所有成员都是公共的,抽象类里面的成员可以是私有的,公共的,受保护的。

        (5)一个类继承于一个接口,就必须完成接口中所有方法的实现。

        (6)接口不能包含字段、构造函数、静态变量或者常量等。

      5.泛型:为避免反复装箱拆箱过程,所以引入泛型。它将装入的数据类型声明好,只允许此种类型的数据加入。在System.Collections.Generic命名空间中。

        非泛型集合类与泛型集合类的对照关系:ArrayList---List<T>;HashTable---Dictionary<T>;Stack---Stack<T>。

    后记:课下学习。

  • 相关阅读:
    python机器学习系列之环境搭建
    github 出现 Permission denied (publickey)的解决
    Eclipse添加Web和java EE插件
    GNU Make 学习系列一:怎样写一个简单的Makefile
    GTK+编程概述
    SpringBoot导出excel数据报错Could not find acceptable representation
    Postman测试上传MultipartFile文件
    idea 代码没有被svn控制
    FPGA基础学习(1) -- FFT IP核(Quartus)
    markdown使用小结
  • 原文地址:https://www.cnblogs.com/zoe-yan/p/4919303.html
Copyright © 2011-2022 走看看