传智播客课件讲课教案.ppt
传智播客课件高级软件人才实作培训专家高级软件人才实作培训专家简要复习lTry-catch-finallylStaticl索引器thisint index,thisstring s,索引器是可以重载的。lNamespace高级软件人才实作培训专家高级软件人才实作培训专家高级软件人才实作培训专家高级软件人才实作培训专家高级软件人才实作培训专家高级软件人才实作培训专家高级软件人才实作培训专家高级软件人才实作培训专家热身1:某工厂某产品的年度销售情况表高级软件人才实作培训专家高级软件人才实作培训专家知识点l虚方法:使用virtual关键字修饰,使用virtual关键字修饰的方法在本类中必须有实现,哪怕是空的。虚方法存在的意义就是为了让子类重写。子类可以重写,也可以不重写。l方法重写:只有用virtual、abstract、override修饰的方法在继承后子类可以重写。/实现方法重写的方式3个关键字l什么是方法重写?答:方法重写是指子类继承父类后在子类中有一个与父类中某个方法签名一致,但方法内容可以重新定义的方法,并用override关键字修饰。l抽象类:abstract关键字修饰;不能实例化;可以有抽象成员也可以有非抽象成员(1.有抽象成员的类必须标记为abstract,并且不能有任何实现;2.类中的抽象成员在子类中必须实现(override),除非子类也是抽象类);lvirtual方法和abstract方法的区别:virtual方法子类可以override,也可以不override。Abstract标记的成员在子类中必须override,除非子类也是抽象类。lToString()方法、Equals()来自于Object,任何类都有,通过override有了不同的实现(举例,自己的类实现ToString())高级软件人才实作培训专家高级软件人才实作培训专家l思考:父类到底要不要写成抽象类?l抽象类的意义:不能从抽象类创建对象,它的意义在于被扩展。代码重用、多态(简化了is DataType的判断)。普通类的继承能实现多态吗?l方法重写的意义:为所有子类定义了某种规范(某种必须有的规范),多态。/这里的规范可以理解为”行为“,就是方法。/以后用到得接口等中提到的规范,其实目的就是让新增加的类必须具有某些方法,这样才能满足我们程序中的要求。(对程序扩展做了一定的约束。)高级软件人才实作培训专家高级软件人才实作培训专家练习l练习1:形状类Shape(父类),包含Size属性和计算面积getArea()方法。圆类Circle继承Shape,可以计算圆的面积。正方形类Square继承Shape,可以计算正方形面积。最终要求能实现:Shape sh=new Circle(5);sh.getArea()能计算出圆的面积。Shape sh=new Square(5);sh.getArea()能计算出正方形的面积。高级软件人才实作培训专家高级软件人才实作培训专家热身:传智播客员工通讯录高级软件人才实作培训专家高级软件人才实作培训专家传智播客员工通讯录的类设计l员工,属性:(姓名,联系电话、Email);方法:Print(),将自己的信息画到Panel上。l讲师,继承自员工,有自己特有的。l市场人员,继承自员工,有自己特有的l教学部经理,继承自讲师。重写Teach()方法,内容变成了“讲公开课”。l市场部经理,继承自市场人员。重写Publicize()方法,内容变成了“区域宣传”。l注意:所有人员均有显示自己详细信息的功能(姓名,电话、Email、职位)在类设计过程中考虑是否使用抽象类方法重写时,考虑使用virtual还是abstract,为什么?某个类到底应该从谁来继承,比如SellerManager应该直接继承自Seller而不是Employee。高级软件人才实作培训专家高级软件人才实作培训专家测试传智播客员工通讯录类的设计l新建一个窗体l该窗体有一个泛型集合(父类数组代替),用来存储员工信息l窗体加载时初始化5位员工,其中包括2个经理,3个普通员工。l单击“显示”按钮时,循环将所有员工信息通过“画图”(Graphics),显示到Panel上。l注意:体会父类指向子类时的方法调用。注意:体会父类指向子类时的方法调用。(多态就是通过这个实(多态就是通过这个实现的,这就是为什么我们总是现的,这就是为什么我们总是Person p=new Chinese();而不是而不是Chinese c=new Chinese();)高级软件人才实作培训专家高级软件人才实作培训专家让子弹飞-游戏介绍l演示游戏高级软件人才实作培训专家高级软件人才实作培训专家分析游戏中的对象和类lPlane位置(X,Y)被击中次数HitTimes速度Speed是否被击中IsHit飞机的有效区域Rectangle类型FieldArea大小Size=方法=Draw()把自己会知道控件上Move()方法lBullet位置(X,Y)速度Speed大小Size有效区域Rectangle类型,FieldArea=方法=Hit()判断击中目标了吗?Move()移动Draw()绘制自身开始攻击Fire().高级软件人才实作培训专家高级软件人才实作培训专家抽象Plane与Bullet的父类lGameObject:l属性:坐标X,Y速度Speed大小Size区域FieldAreal方法:移动Move()绘制自身Draw()高级软件人才实作培训专家高级软件人才实作培训专家开始编写窗体代码l首先添加需要的资源到Resources(方便稍后使用),这种方式可将图片、音频等资源直接编译到exe或dll文件中,将来程序发布时只需要一个可执行文件即可,无需发布所有图片、音频等其他资源。与web程序不同。l第一步:窗体一开始运行就需要一个飞机【plane.Draw()】,让飞机动起来【plane.Move()】。在窗体上添加Plane成员变量。l第二步:单击鼠标时需要产生一个子弹【bullet.Draw()】,并且子弹需要“飞”【bullet.Move()】l何时判断是否相撞,在哪里写代码?l判断相撞的代码应该写在哪个类?Plane or Bullet?l完成IsHit()判断是否相撞的代码。高级软件人才实作培训专家高级软件人才实作培训专家l当飞机第一次被击中时,控制闪烁,通过两个变量,plane.isHit;plane.isVisible;l飞机被击中两次后,播放声音,并重新实例化一架飞机。高级软件人才实作培训专家高级软件人才实作培训专家扩展:又增加了一个飞船l体会Bullet类的IsHit()方法的设计,体会方法重载IsHit(Plane plane)IsHit(Ship ship)高级软件人才实作培训专家高级软件人才实作培训专家总结:如何分析系统中的类和对象高级软件人才实作培训专家高级软件人才实作培训专家lVirtual注意:l1.使用virtual关键字表示方法,写在返回值的签名public virutal或virtual publicl2.使用virutal关键字修饰的方法必须有实现l3.子类可以重写,也可以不重写。l子类重写时使用override关键字。l注:方法重写时,方法签名必须与父类中的虚方法完全一致,否则重写不成功,其中包括“返回值”高级软件人才实作培训专家高级软件人才实作培训专家Abstract注意l抽象类不能被实例化l如果一个类中有任何抽象成员,那么这个类也必须是抽象类abstract classl子类继承抽象类后,必须重写父类中的所有抽象成员,除非子类也是一个抽象类l抽象成员在抽象类中不能有任何实现。l抽象类中可以有抽象成员也可以有非抽象成员