} } }

    初试刀 浅谈Java和C#在面向对象上语法的差别

    添加时间:2013-6-3 点击量:

      做了几年了开辟一向没有总结什么,回到了故乡的小城做了一名培训班的教员,传授软件开辟的常识。藐小的常识从头细细嚼来,别有一番滋味。或是以前漏掉的太多,或是确切没有体系的进修过,教授教化生的过程中本身也对教材有了一遍体系深切的进修。固然教的和学的都很肤浅,然则为了帮助学生们懂得,然后本身也会思虑为什么会如许?这种来自于最根蒂根基的思虑,一向向上反馈,发明这种思虑本来可以令本身进步的很是快。固然今朝还在思虑入门阶段的题目,已经受益很多了。那么若是把之前的开辟中的题目都思虑一遍,又能收成几许能?写写博客吧,一向告诉学生们这是一个好的习惯,可本身却从来没怀孕材力行。那么,就从如今开端..


     

     目次


    1.面向对象

    2.三大特点-封装

    3.三大特点-持续

    4.三大特点-多态

    5.抽象类和接口

    6.总结


     

    返回目次 面向对象

      面向对象是一种开辟思惟,最应当记住的一句话是万物皆对象。为了让法度更好的被懂得和编写,把实际生活生计中描述事物的体式格式和思路融合进入,就成了面向对象的思惟。把生活生计中的事物融合进法度中那么就须要描述,描述分为特点和行动两方面,而不合类此外对象特点和行动具有重大的差别,为了更好的制订描述每一类事物的体式格式,那么提取来一个编程世界中的类的概念,等同于生活生计中的类型的概念,每一种事物都应当是有类型的。然后生活生计中的事物按不合的方面进行分类的话,可以划入不合的类别,所有编程中的类也是一个公说公有理,婆说婆有理的玩意,相当的抽象,具有相当的不断定性和随便性。


      类的构成:


        Java中的类,包含属性和办法。属性即类中的变量,可分静态变量、实例变量(全局变量)、局部变量(存在于办法中,声明周期仅限于该办法的调用阶段)


        C#中的类,包含字段、属性和办法。字段对应java中的属性,C#中的属性对象java中的get和set接见器,是对字段的封装,办法一样,都是描述行动。


      类成员的调用:


        实例成员由对象调用。静态成员由类调用。然则在java中静态成员也可以被实例调用,相当于班上的每一个学生都可以随便率性的安排班费了,很不好的一个题目。C#在这方面严格限制了,静态成员只能有类进行调用。


     

    返回目次 三大特点-封装

      封装:为了隐蔽内部的实现细节,达到对数据安然性的保护和代码重用的结果的一种手段。


      封装无处不在,看似简单却可无穷延长。并没有一个明白的关键字来默示封装。既然是思惟,是手段,所有在java中和c#中是没有语法区此外。仅仅是他们在借助接见润饰符来达到封装的结果时,两种说话的接见润饰符是不一样的。


      Java中:


        private:私有的,仅内部可以接见


        dufault:默认的,同一包的内部可以接见。


        protected:受保护的,同一包中或者是不合包的子类中可以接见。


        public:公共的,任何处所可以接见。


        特点:有明白的大小统属关系:private < default < protected < public


      C#中(引入法度集的概念。定名空间类似于java中的包,但它是逻辑分组不合于java中的包是物理分组,法度集类似于一个项目):


        private:私有的,仅内部可以接见。


        intenal:内部的,同一法度集的内部可以接见,同default。


        protected:受保护的,子类中可以接见,和java中protected是不合的,此处局限要小些,同法度集的非子类不克不及接见。


        proteted intenal:是intenal和protected接见局限的并集。


        public:公共的,任何处所可以接见。


        特点:没有明白的大小统属关系,intenal和protected的接见局限大小是分不清的。


     

    返回目次 三大特点-持续

      持续:目标是为了让一个类拥有另一个类的属性和办法。


      Java中:应用extends默示应用持续


        重写的请求:a、办法名、返回值类型、参数雷同;b、接见润饰符接见局限要大于或便是父类办法接见润饰符;


        接见父类成员:应用super关键字,可应用super(参数);在机关办法中指定调用父类一个机关办法。


      C#中:应用:默示应用持续


        重写的请求:a、办法名、返回值类型、参数、接见润饰符雷同;b、父类办法被virtual润饰,子类办法被override润饰


        接见父类成功:应用base关键字,在机关办法后应用:base(参数);指定调用父类机关办法,base不克不及应用在静态景象中,不克不及调用父类静态成员。


        覆盖:应用new关键字。在c#中引入覆盖的内容,对父类的非virtual办法,也就是不成重写的办法,应用覆盖,可以覆盖掉父类的办法。对覆盖我的见地是为了弥补必须被virtual润饰的办法才干重写这个限制可能带来的题目,然则能不消就不消,覆盖意义不大,或者说是我还没有逼真领会到覆盖的实际感化和应用处合,有高人可以评论解惑。



      断定是否重写成功的根据:应用父类的引用指向子类的对象,若是该办法调用的是父类办法申明重写不成功,若是调用到子类办法,申明重写成功。


     

    返回目次 三大特点-多态

      多态:同一种行动的多种存在形态。发挥解析情势有:重载、重写。


      重载请求:a、同一类中;b、办法名雷同;c、参数不合(参数个数、类型、次序)。


      调用时按照传入的参数来决意调用到哪一办法。


     

    返回目次 抽象类和接口

      抽象类:应用abstract润饰的类称为抽象类。


      起原:在我看来,抽象类的起原是值得细心揣摩一下,有利于加深懂得。实际生活生计中存在很多如许的题目,也就是我们知道这一类事物都邑做这个动作(办法),然则并不知道它如何去做,比如我们都知道动物为动,然则每个动物你不知道它如何去动。这个时辰定义这个Animal类时,就须要一个move办法,只有办法头(描述会做什么工作),没有办法体(描述如何去做这件工作),那么这个办法斗劲特别,我们就标识表记标帜为抽象办法,应用abstract润饰。


        那么Animal类中有了抽象办法,假如你实例化了Animal类,当你调用move办法时,会呈现什么样的题目呢?未知,因为它并没有描述如何去做。所认为了避免呈现这种未知的景象,比如把Animal类定义为抽象类,明显特点就是不克不及实例化。一个不克不及实例化的类,他的非静态成员是不成被调用的,那么如许的类存在的意义在于什么呢?


      所以总结:抽象类存在的意义在于被持续。抽象类是为了抽象办法而存在的,有机关办法却不克不及被实例化。语法上java和c#在这方面是一样的,不再细说。


      


      接口:制订的一组规矩和规范,让实现类都满足这个规矩和规范,在实际应用中能很度增长法度的灵活性。面向接口编程,我的懂得也不是希罕深,也不是我一两句可以讲清楚。有高人可以在后面贴贴本身的心得,进修进修。


      差别:C#中,实现类若是没有实现接口中所有的办法,则比如把本身定义为抽象类并且把未实现的办法从头抄写一遍定义为抽象办法。


     

    返回目次 总结

      一向以来是做java开辟的,教授教化的须要才进修c#,有相通之处,学起来很快。这里仅仅存眷语法,对于大牛们都在搞和谈,搞底层,是看不上这个的。


      仅以此文抛砖引玉,该喷喷,该砸砸,别人身进击就好了。


      借此消磨了一个周末的落拓下午

    我们永远不要期待别人的拯救,只有自己才能升华自己。自己已准备好了多少容量,方能吸引对等的人与我们相遇,否则再美好的人出现、再动人的事情降临身边,我们也没有能量去理解与珍惜,终将擦肩而过。—— 姚谦《品味》
    分享到: