zoukankan      html  css  js  c++  java
  • 面向对象(2)

    访问级别约束

    访问级别约束:子类访问级别不能比父类高(等级观念),因为子类能够出席的场合父类都应该能出席,如果父类可访问级别比子类低就有了父类去不了的场合(儿子能去的地方爹一定要能去)。举例;方法、属性等暴露的返回值、参数的数据类型不能比方法、属性或者所在类的可访问级别低,因为这些方法、属性要能在高级场合出现,如果用到的类型却不能在这个场合出现就明显不合理了。

    多态

    先看看ToString()方法 多态就是指不同对象收到相同消息时,会产生不同行为,同一个类在不同的场合下表现出不同的行为特征

    里氏替换原则

    父类引用指向子类对象

    父类对象不能够替换子类

    is-a 关键字as is

    怎么实现多态1-抽象类abstract

    什么是抽象类

    不能被实例化的类(不能new)

    抽象类的特点

    见备注

    案例1:计算形状Shape(圆circle,矩形Square ,正方形rectangle)的面积、周长

    案例2:动物animal   都有吃eat和叫bark的方法,狗dog和猫cat叫的方法不一样

    练习:都要具有SayHello和起立standup两个方法学生类和老师类中抽象出父类(person),并让学生和老师

    做网站的公司(抽象类)  你给我活我去开发网站,但是网站需要一部分flash,我公司力都是程序员(抽象类中有实现的方法)。没人会做flash(抽象方法),于是我把做flash这部分工作给其它公司去做(重写抽象方法的类)
    
    抽象类为子类提供所需要的成员
    抽象类定义的是公共的实现和能力
    抽象类中的成员既可以有实现也可以无实现
    抽象类必须由其子类实现它的抽象成员(除非子类也是抽象类)
    抽象类不能被实例化
    一个类只能继承一个抽象类(类的单根继承性)
    
    抽象方法(成员)不能有实现,必须被子类重写override(除非子类也是抽象类)
    抽象方法(成员)的只能出现在抽象类中。
    
    
    多态性的含义:使得能够利用基类的指针来引用不同子类的对象,以及根据所引用对象的不同,以不同的方式执行相同的操作。
    多态的作用:把不同的子类对象都当作父类来看,可以屏蔽不同子类对象之间的差异,写出通用的代码,做出通用的编程,以适应需求的不断变化。

    面向对象计算器

    使用面向对象的方式实现+、-、* 、/的计算器

    1、找对象

    2、抽象出父类,让子类都有计算能力

    3、实现子类

    4、造飞机的工厂

    5、调用

    怎么实现多态2-接口

    接口是定义一种能力,规定子类能干什么和抽象类有些相似,解决类的单根继承。接口可以实现多继承

    案例 动物-鸟-麻雀,鸵鸟,企鹅 鸟能飞鸵鸟,企鹅不能。。。你怎么办

    练习:从学生,老师,校长类中抽象出人的类,学生和老师都有收作业的方法,但是校长不会收作业 子类继承抽象类,实现接口 接口中的成员必须不能有实现 接口中的成员不能有访问修饰符,隐式公开 接口中可以有属性、方法、索引器等,但不能有字段 接口中的所有程序必须被子类中全部实现

    皮包公司(接口)。你给我活我有能力去开发网站,但是接到活以后我公司没人会做。于是我把他交给有能力去做的人(实现功能的类)
    使用接口来实现对扩展开放,对修改关闭
    
    子类继承抽象类,实现接口
    接口中的成员必须不能有实现
    接口中的成员不能有访问修饰符,隐式公开
    接口中可以有属性、方法、索引器等,但不能有字段
    接口中的所有程序必须被子类中全部实现
    
    
     static void Main(string[] args)
            {
                //ISpeakable p1 = new Dog();
                //p1.Speak();
    
                ISpeakable p2 = CreateChatter(-1);//接口的优点。不管返回的是什么类型对象,只要能Speak就行
                p2.Speak();//调用的不是ISpeakable接口的方法,而是p2指向的对象的Speak方法
    
                Console.ReadKey();
            }
    
            static ISpeakable CreateChatter(int i)
            {
                if (i < 0)
                {
                    return new Dog();
                }
                else if (i == 0)
                {
                    return new Cat();
                }
                else
                {
                    return new Bird();
                }
            }
        }
    
        interface ISpeakable//接口定义的是一种能力。
        {
            void Speak();
            //面试题:接口中能定义什么?
            //接口中可以定义方法、属性、索引器。因为属性、索引器本质上也是方法。
            //接口中不能定义字段,因为字段是实现。
        }
    
        interface IFlyable
        {
            void Fly();
        }
    
        class Dog : ISpeakable
        {
            #region ISpeakable 成员
    
            public void Speak()
            {
                Console.WriteLine("我是狗狗!");
            }
    
            #endregion
        }
    
        class Cat : ISpeakable
        {
            #region ISpeakable 成员
    
            public void Speak()
            {
                Console.WriteLine("我是猫!");
            }
    
            #endregion
        }
    
        //一个类只能有一个父类
        //一个类可以实现多个接口。接口只能决定能干什么,怎么干由类来实现
        class Bird : ISpeakable, IFlyable
        {
            #region ISpeakable 成员
    
            public void Speak()
            {
                Console.WriteLine("我是鸟!");
            }
    
            #endregion
    
            #region IFlyable 成员
    
            public void Fly()
            {
                Console.WriteLine("灰呀灰!");
            }
    
            #endregion
        }
  • 相关阅读:
    一个基础的C#的ACCESS操作类
    ASP.NET常用的三十三种实用代码
    在ASP.NET中使用MD5和SHA1加密
    一个比较漂亮的DataGrid样式表
    微软的面试题
    打印自定义纸张大小
    ASP.Net(C#)连接Oracle数据库的方法
    C#正则表达式应用范例
    matlab 字符串处理函数
    centos语言设置
  • 原文地址:https://www.cnblogs.com/fanhongshuo/p/3826177.html
Copyright © 2011-2022 走看看