Java和C#在面向对象上语法的区别

做了几年了开发一直没有总结什么,回到了家乡的小城做了一名培训班的教员,教授软件开发的知识。细小的知识从头细细嚼来,别有一番滋味。或是以前遗漏的太多,或是确实没有系统的学习过,教学生的过程中自己也对教材有了一遍系统深入的学习。虽然教的和学的都很肤浅,但是为了帮助学生们理解,然后自己也会思考为什么会这样?这种来自于最基础的思考,一直向上反馈,发现这种思考原来可以令自己进步的非常快。虽然目前还在思考入门阶段的问题,已经受益良多了。那么如果把之前的开发中的问题都思考一遍,又能收获多少能?写写博客吧,一直告诉学生们这是一个好的习惯,可自己却从来没有身体力行。那么,就从现在开始......   面向对象

  面向对象是一种开发思想,最应该记住的一句话是万物皆对象。为了让程序更好的被理解和编写,把现实生活中描述事物的方式和思路融合进入,就成了面向对象的思想。把生活中的事物融合进程序中那么就需要描述,描述分为特征和行为两方面,而不同类别的对象特征和行为具有巨大的差异,为了更好的制定描述每一类事物的方式,那么提取来一个编程世界中的类的概念,等同于生活中的类型的概念,每一种事物都应该是有类型的。然后生活中的事物按不同的方面进行分类的话,可以划入不同的类别,所有编程中的类也是一个公说公有理,婆说婆有理的玩意,相当的抽象,具有相当的不确定性和随意性。

  类的构成:

  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#,有相通之处,学起来很快。这里仅仅关注语法,对于大牛们都在搞协议,搞底层,是看不上这个的。

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

Java和C#在面向对象上语法的区别

时间: 2024-10-15 16:43:06

Java和C#在面向对象上语法的区别的相关文章

java基础学习_面向对象(上)01_day07总结

==========================================================================================================================================================涉及到的知识点有:1:面向对象(掌握) (0)面向过程和面向过程开发 (1)面向对象思想概述 (2)面向对象的思想特点 (3)把大象装进冰箱(理解) (4)类与对象的关系 (5)类的定义及使用

java基础学习_面向对象(上)03_day08总结

==========================================================================================================================================================涉及到的知识点有:0:前面学习通过方法对代码进行改进,为什么要给方法使用静态呢?1:Java如何制作帮助文档(API)(了解)2:通过JDK提供的帮助文档(API)学习了Math类(掌握)3:

java基础学习_面向对象(上)02_day07总结

==========================================================================================================================================================涉及到的知识点有:---------------------------------------------------------------------------------------

Java程序猿之面向对象(上)

定义类 面向对象的程序设计过程中有两个重要概念:类(class)和对象(object,也被称为实例,instance). 类是某一批对象的抽象,也可以把类理解为某种概念:对象时一个具体存在的实体. 类和对象是面向对象的核心. Java语言定义类的简单语法如下: [修饰符] class 类名{ 零个到多个构造器定义…… 零到多个成员变量 零到多个方法 } 上面修饰符可以是public.final.abstract,或者完全省略这三个修饰符. 类名只要是一个合法的标识符就可以,但是为了程序的可读性来

java之面向对象---上

1:值类型 八大类型:整性—>byte(1字节),short(2字节),int(4字节),long(8字节): 浮点数—>float(4字节)--8位整,23位小数,1位符号:double(8字节)--11位整数,52位小数,1位符号 字符—>char(2字节)---汉语的原因吧 逻辑型—>bool(1bit) 其它数据类型:类类型. 存储方式:8大类型变量存储于栈中:是值类型 类类型变量,是引用类型,对象存放于堆中,在栈中存引用值,大小固定为4字节. 只能通过new来构造对象,不

第04章(面向对象——上)

1 /***************** 2 ***第四章面向对象(上) 3 *******知识点: 4 **************1.类和对象 5 ******************1.1 关键字 6 ******************1.2 定义 7 ******************1.3 使用 8 **************2.方法和属性 9 ******************2.1 关键字 10 ******************2.2 方法重载和重写 11 ******

[转] Java程序员学C#基本语法两个小时搞定(对比学习)

Java程序员学C#基本语法两个小时搞定(对比学习) 对于学习一门新的语言,关键是学习新语言和以前掌握的语言的区别,但是也不要让以前语言的东西,固定了自己的思维模式,多看一下新的语言的编程思想. 1.引包 using System;java用import2.构造函数和java语法相同3.析构函数  变量和类的对象都有生命周期,生命周期结束,这些变量和对象就要被撤销.  类的对象被撤销时,将自动调用析构函数.一些善后工作可放在析构函数中完成.  析构函数的名字为~类名,无返回类型,也无参数.Per

Day7 - 面向对象高级语法

参考文章:http://www.cnblogs.com/alex3714/articles/5213184.html 本节内容: 面向对象高级语法部分 静态方法.类方法.属性方法 类的特殊成员方法 反射 静态方法                                                                                   通过 @staticmethod 装饰器即可把其装饰的方法变为一个静态方法,什么是静态方法呢?其实不难理解,普通的方法,可

Java script 中的面向对象1

Java script 中的面向对象 对象 对象是Javascript的基本数据类型,对象是一种复合值,将很多的键值对聚合在一起使用.对象可看做是属性的无序集合,每个属性都是一个名/值对.属性名其实是一个字符串.我们可以把对象看做是字符串到值的映射. 创建对象 例子代码如下: <script type="text/javascript" language="JavaScript"> ????//创建一个对象o 有两个属性 x y ????????var