《C#、C++、Java面向对象比较研究.docx》由会员分享,可在线阅读,更多相关《C#、C++、Java面向对象比较研究.docx(68页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、目 录摘要3ABSTRACT4第一章面向对象概述51.1面向对象的基本概念51. 1. I 对象51. 1.2 类61. 1.3消息和方法61.2面向对象的基本特征7*本继多2. 1类的定义格式9小纟口93. 2类中成员的访问修饰符10小结114. 3类中的数据成员112.3.1 常数据成员11小结132.3.2 静态数据成员13小结152. 4类中的成员函数152.1.1 普 乂贝函数15小结182.1.2 静态成员函数18小结202.1.3 构造函数20小结232. 5对象的撤销23小结24第三章继承253. 1继承的定义格式25小结273. 2类中成员的属性:28小结293. 3派生类的
2、构造函数30小结313.4类中的同名覆盖32小结373. 5对象转换37小结403. 5多重继承403. 5. 1接口的定义格式41小结423. 5. 2接口多重继承的实现42小结453. 5. 3复杂的多重继承46小结50第四章多态性514. !静态联编514. 1. 1函数重载与模板51小结554. 1.2运算符重载55小结564.1.3指针与强制多态56小结594. 2动态联编604. 2. I虚函数60小结62422抽象类63小结66总 结错误!未定义书签。致谢6869参考文献摘要面向对象的程序设计技术是目前最流行、最实用的软件开发手段。与 传统的面向过程程序设计结构化技术完全不同。它
3、的出现是程序设计语言 的场革命。它主要包括类、对象、消息、方法、属性等基本概念,具有 封装性、继承、多态性、重载等特点。在面向对象的程序设计中,现实世 界的对象被抽象为“类”。程序员将精力主要集中于要处理的对象的设计 和研究上,通过继承、多态、重载可以很方便的实现代码的重用,从而大 大提高了软件的开发效率。C+、Java和C#都是目前最流行的面向对象程 序设计语言,它们都可以为面向对象的技术提供全面的支持。本文共分为四章,第一章主要介绍了面向对象的基本概念和特征。第 二章主要比较了 C+、Java和C#语言类中成员的定义、访问权限、对象 的撤消等。第三章主要比较了 C+、Java和C#语言在继
4、承方面的异同点, 并且给出了相关的程序。第四章主要比较了 C+、Java和C#语言在多态 性方面的异同点,并且给出了相关的程序。最后总结了 C+、Java和C#语 言的优劣并给出了进行毕业设计的心得体会。关键词:面向对象类继承多态性重载ABSTRACTThe Object Oriented Programming (OOP) is the most popular and useful method of software developing now. It is different from the traditional Process Oriented structured Progr
5、amming. Its emergence is a revolution of programming language. It mainly includes these basic concepts such as classes objects messages methods attributes etc and these characteristics such as encapsulationinheritance、polymorphism、 overloading and so on. In the Object Oriented Programming, the objec
6、ts in the world are abstracted as classes. Programmers chiefly concentrate the design and research of objects. By means of the encapsulation、inheritance、polymorphism and overloading, programmers can very conveniently complete codes of reusing, thus greatly increasing the development efficiency of so
7、ftware. C+、Java and C# are the most popular Object Oriented Programming language at present.They can provid overall support for Object Oriented Programming.There are four chapters in the thesis. In the first chapter, the basic concept and characteristic ofobject-oriented is introduced. In the second
8、 chapter, the definition of member, the access authority ,the object remove were chiefly compared in the C+、Java and C# language. In the third chapter ,similiarities and differences at the aspect of the inheritance in the C+、Java and C# language were compared and given out the program of correlation
9、. In the 4th chapter, similiarities and differences at the aspect of the polymorphism in the C+、Java and C# language were compared and given out the program of correlation. Finally sum up the good and bad of C+ , Java and C#*s language and given out the tag of graduation design.Key Words:Object Orie
10、nted Class Inherit Polymorphism Overloading第一章面向对象概述1.1 面向对象的基本概念1.1.1 对象客观世界的问题都是由客观世界的实体及实体间的相互关系构成的, 我们把客观世界的实体称为问题空间的对象。显然,“对象”不是固定的。 一本书是个对象,一家书店也可以是一个对象。世界上的各个事物都是 由各种“对象”组成的。任何事物都是对象,复杂的对象可以由相对比较 简单的对象以某种方式组成。从这种意义上讲,整个客观世界可认为是 个最复杂的对象。从动态的观点看,对象的操作就是对象的行为。问题空间对象的行为 是极其丰富多彩的,而解空间对象的行为是死板的,只有借
11、助于复杂的算 法才能操纵解空间的对象而得到解。传统的程序设计语言限制了程序员定 义解空间对象,而面向对象语言提供了 “对象”概念。这样,程序员就可 以自己去定义解空间对象。从存储的角度看,“对象”是一片私有存储,其中有数据也有方法。 其他对象的方法不能直接操纵该对象的私有数据,只有对象自己的方法 可操纵它。从对象的实现机制来看,“对象”是一台自动机,其中私有数据表示 了对象的状态,该状态只能由自身的方法改变它。每当需要改变对象的状 态时。只能由其他对象向该对象发进消息,对象响应消息后按照消息模式 找出匹配的方法,并执行该方法。在面向对象的设计中,“对象”是应用领域中的建模实体。所有对象 在外观
12、上都表现出相同的特性,即固有的处理能力和通过传邀消息实现的 统一的联系方式。在面向对象的程序设计中,“对象”是系统中的基本运行实体。换 句话说,“对象”是具有特殊属性(数据)和行为方式(方法)的实体。 对象占有存储空间且具有传统程序设计语言的数据,如变量、数组、字 符串等。给对象分配存储空间就确定了给定时刻对象的状态,与每一个 对象相关的方法定义了该对象上的操作。1.1. 2 类在面向对象的程序设计中,“对象是程序的基本单位,相似的对象可 以和传统语言中的变量与类型关系样,归并到类(class)中去。类 实质上定义的是种对象类型,它是对具有相似行为的对象的一种抽象, 描述了属于该类型的所有对象
13、的性质。例如:integer是个类,它描述了所有整数的性质,“、“2” 等具体整数都是integer这个类的对象,都具备算术运算和大小比较的处 理能力。对象是在执行过程中由其所属的类动态生成的,个类可以生成多个 不同的对象。同一个类的所有对象具有相同的性质,即其外部特性和内部 实现都是相同的。个对象的内部状态(私有属性)只能由其自身来修改, 任何别的对象都不能来修改名。因此,同一个类的对象虽然在内部状态的 表现形式上相同,但它们可以有不同的内部状态。这些对象并不是一模 样的。1.2. 3消息和方法如何要求对象完成一定的处理工作?对象间如何进行联系?所有这 一切都只能通过传递消息来实现。消息用来
14、请求对象执行某处理或回答 某些信息的要求,消息统一了数据流和控制流。某对象在执行相应的处 理时,如果需要,它可以通过传递消息请求其他对象完成某些处理工作或 冋答某些信息。其他对象在执行所要求的处理活动时,同样可以通过传 递消息与别的对象联系。因此,程序的执行是靠在对象间传递消息来完成 的。发送消息的对象称为发送者,接收消息的对象称为接收者。消息中只 包含发送者的要求,它告诉接收者需要完成哪些处理,但并不指示接收者 应该怎样完成这些处理。消息完全由接收者解释,接收者独立决定采用什 么方式完成所需的处理。一个对象能够接收不同形式、不同内容的多个消 息:相同形式的消息可以送往不同的对象;不同的对象对
15、于形式相同的消 息可以有不同的解释,能够作出不同的反应。对于传来的消息,对象可以 返回相应的应答信息,但这种返回并不是必需的。消息的形式用消息模式(message pattern)刻画,个消息模式定义 了一类消息,它可以对应不同内容的消息。对于同一消息模式的不同消息, 同一 个对象所作的解释和处理都是相同的,只是处理的结果可能不同。因 此有处理能力接消息分类,个消息模式定义对象的种处理能力。这种 处理能力是通过该模式及消息引用表现出来的。所以,只要给出对象的所 有消息模式及相应于每个消息模式的处理能力,也就定义了一个对象的固 有处理能力。它是定义对象接口的唯一信息。使用对象只需了解它的消 息模
16、式,所以对象具有极强的“黑盒”性。把所有对象分成各种对象类, 每个对象类都定义一组“方法”,代表允许作用于该类对象上的各种操作。1.3. 向对象的基本特征L2.1封装封装是种信息隐蔽技术,用户只能看到对象封装界面上的信息, 对象内部对用户是隐蔽的。封装的目的在于将对象的使用者和设计者分 开,使用者不必知道行为实现的细节,只需用设计者提供的消息来访问这 对象。封装的定义为。(1)一个清楚的边界,所有对象的内部软件的范围被限定在这个边界内;(2) 一个接口,这个接口描述该对象和其他对象之间的相互作用:(3)受保护的内部实现。这个实现给出了由软件对象提供的功能的细节, 实现细节不能在定义这个对象的类
17、的外面访问。封装的概念和类说明有关,而且同样提供如何将一个问题解的各个组 件组装在起的求精过程。封装的基本单位是对象。这个对象的性质由它 的粪说明来描述,这个性质被具有同样类的其他对象共享。对象用作封装 比讲个类表示的封装更具体化。有了封装这个定义个类的每个实例在 个问题求解中是一个单独的封装,或称作组件。对象用于封装的概念可以和集成电路芯片作一类比。块集成电路芯 片被封装起来,其内部电路是不可见的,也是使用者不关心的。芯片的使 用者只关心芯片引脚的个数、引脚的电气参数以及引卿提供的功能,通过 对各个引脚功能的了解,可以将不同的芯片引脚连在起,组装成具有一 定功能的产品。同样,软件设计者可以通
18、过对类和对象的使用达到这个目 的。显式地将对象的定义和对象的实现分开是面向对象系统的一大特色。 封装本身即模块化,把定义模块和实现模块分开,就使得用面向对象技术 所开发设计的软件的维护性、修改性大为改善,这也是软件技术追求的目 标之。1.2. 2继承广义地说,继承是指能够直接获得已有的性质和特性,而不必重复定 义它们。在面向对象的软件技术中,继承是子类自动地共享基类(或父类) 中定义的数据和方法的机制。个类直接继承其父类的全部描述(数据和 操作)。继承具有传递性,继承性使得相似的对象可以共享程序代码和数据结 构,从而大大减少了程序中的冗余信息。使得对软件的修改变得比过去容 易得多了。继承性使得
19、用户在开发新的应用系统时不必完全从零开始,可以继承 原有的相似系统的功能或者从类库中选取需要的类,再派生出新的类以实 现所需要的功能,所以,继承的机制主要是支持程序的重用和保持接口的 一致性。1.2. 3多态性所谓多态(plymorphic)即个名字可具有多种语义。在大多数面向 对象的语言中,如果类P是子类S的父类,则子类S的对象s可以用在 父类P的对象p使用的地方,这就意味着一个公共的消息集(操作)可 以送到类P和类S的对象上。当同样的消息可以被送到个父类的对象 和其子类的对象上时这被称作多态性(polymophism)。在不同的对象上 对个相似的操作使用相同消息的方法和人们在解决问题中的思
20、考方式 是相遇的,我们不必为打印整数、浮点数、字符而使用不同的束语。面向对象的语言中,多态引用表示可引用多个类的实例。由于多态具 有可表示对象的多个类的能力,因此,它既与动态类型有关,又与静态类 型有关。动态类型是在程序执行期间随时可以改变的类型。在强类型面向对象 环境中,运行系统根据动态类型自动地保留标记的全部多态引用。静态类型是在程序正文中声明实体 时确定下来的类型。在编译时已经知邀并确定了对象在运行时的有效类型 集合。第二章类与对象2.1 类的定义格式C+中类的定义格式:Class 类名称I修饰符:成员函数或数据成员的说明;);其中是定义类的关键字。类名称是一中标识符,对花括号内是 类的
21、说明部分。说明该类成员。类的成员包含数据成员和成员函数两部分。 Java中类的定义格式:修饰符Class类名称(类的属性与方法;)类名称的第一个字母为大写,例如:SystemoC#中类的定义格式:修饰符Class类名称!类的成员;小结在C+中类定义不存在类修饰符,而C#和沸va中类修饰符决定了 这个类的属性。在Java中类名称的第一个字母必须大写,而C#和C+ 中类名称无需这个必要。2.2 类中成员的访问修饰符C+提供了 3个不同的访问权符,它们规定的成员访问属性互不同:(1)public (公有的)具有这种访问属性的成员,可被与该类对象处在同 一作用域内的任何函数使用。(2) private
22、 (私有的)私有的成员只能被它所在类中的成员函数及该类 的友元函数使用。(3) protected (保护的)具有这种访问属性的成员只能被它所在类及从 该类派生的子类的成员函数及友元函数使用成员访问控制类自身派生类其他类Public可被访问可被访问可被访问Private可被访问不可被访问不可被访问Protected可被访问可被访问不可被访问Java提供了 4个不同的访问权符,它们规定的成员访问属性互不同:(1) public (公有的)定义成这种等级的属性,可以被任何对象存取,适 用于完全公开的数据。(2) private (私有的)定义成这种等级的属性,只可以被同一类的方法 所存取,适用于类
23、中不欲公开的数据。(3) protected (保护的)则具有半公开性质的数据,定义成这种等级的 数据可以被类,子类及从同一包的其他类的方法存取。(4) default (无修饰符)定义成这种等级的属性,将可以被同一 package 类的方法存取。注意:使用default等级时,只是在属性前不加上任何修饰符,而不是在 属性前使用default关键字。存取等级同一类同一 package、同 package其他类子类其他类子类Public可被访问可被访问可被访问可被访问可被访问Private可被访问不可被访问不可被访问不可被访问不可被访问Protected可被访问可被访问可被访问不可被访问可被访问
24、无修饰符可被访问可被访问可被访问不可被访问不可被访问C#提供了 5个不同的访问权符,它们规定的成员访问属性互不同:(1) public (公有的)具有这种访问属性的成员,可以被任何随意访问。(2) private (私有的)定义成这种等级的属性成员,只可以被类自身访问。(3) protected (保护的)具有这种访问属性的成员只能被它所在类及从 该类寐承的任何成员访问。(4) internal (内部的)具有这种访问属性的成员,可被与同一程序集内 部的任何类的任何成员访问。(5) internal protected (内部保护的)具有这种访问属性的成员只能被可 被与同一程序集内部的中或继承
25、类中被访问。存取等级同一类同一程序集的内部不同一程序集的内部其他类子类其他类子类Public可被访问可被访问可被访问可被访问可被访问Private可被访问不可访问不可访问不可访问不可访问Protected可被访问不可访问可被访问不可访问不可访问Internal可被访问可被访问可被访问不可访问不可访问Protected internal可被访问可访问可被访问不可访问可访问小结Protected关键字在C+、java和C#中的作用是完全不同的。标记 为Protected的C+类,成员函数和变量可以在所在类及从该类派生的 子类的成员函数及友元函数使用。标记为Protected的java类,成员函数
26、和变量可以在同一包中或继承类中被访问。标记为Protected的C#类, 方法和变量可以被类或其继承类的任何成员访问。Java中的Protected与 C#中的Protected internal相似。Java中的无修饰符与C#中internal的 相似。Public和Private修饰符在C+、java和C#中用法都一样。2. 3类中的数据成员3. 3.1常数据成员常数据成员是类中定义的常量。在类中使用的某个常数值都可以定义 为常量。如圆周率,个星期的天数,每小时的分钟数等。在C+ +中定义const常量的格式是: 常量修饰符类型标识符常量名 注意:在C + +中不允许在类中对个const型
27、数据成员直接进行初始化。 例如:class MyClassconst float pi=3.14; 错误用法 float x,y;);正确的初始化方法是:常数据成员由构造函数初始化列表方法初始化 class MyClassconst float pi; float x,y;public: MyClass(); ;MyClass:MyClass():pi(3.14) 在C#中定义const常量的格式是: 常量修饰符类型标识符常量名=常量表达式值; 例:class MyClass public :const float pi=3.14float x,y;);在C#中定义readonly常量的格式是
28、:访问修饰符static readonly类型关键字 成员标志符=表达式;例:using System;class Student public readonly StudentIDpublic Student (string specifedStudent ID)StudentID= specifedStudent ID; class Classroom public static void Main()Student Student l=new Student (“2002001);Console.WriteLine(“学号为:+Student.StudentID);运行结果为:学号为:2
29、002001注意:与常量成员(由const关键字声明)样,只读成员也用与表 示一个不变化的值。但是,赋值给常量的值必须在源代码中指定。而只读 成员的值直到程序运行时知道。只读成员的值在一个构造函数中初始 化,而且此后不能在修改。所以常量成员在编译后程序的整个生存周期内 保持不变。而只读成员只在此对象生存周期内保持不变Java:定义常量的格式是:修饰符fina!数据类型常量名=常量表达式值 例:class MyClass public final float pi=3.14;float x,y;);小结在C+ +中不允许在类中对个const型数据成员直接进行初始化。 常数据成员由构造函数初始化列
30、表方法初始化。和C+不同C#可以在类 中对个const型数据成员直接进行初始化,并且在C#中存在readonly 常量。和C+、C#不同java用的是final标识符对个常数据成员直接 进行初始化。2. 3. 2静态数据成员静态数据成员是为了解决同一个类的不同对象之间的数据和函数共 享问题。例如,我们可以抽象出某公司的全体雇员的共性,设计如下的雇 员类:class employee private:int EmpNo; int ID; char *name;.)如果需要统计雇员总数,这个数据存放在什么地方呢?若以类外的变 量来存储总数,不能实现数据的隐藏。若以类中增加一个数据成员用以存 放总数
31、,必然在每个对象中都存储副本,仅冗余,而且每个对象分 别维护个“总数”,势必造成数据的不一致性。因此,比较理想的方案是 类的所有对象共同拥有一个用于存放总数的数据成员。类中的静态数据成员只存储在个地方,静态数据成员的值对每个 对象都是样的。如果在某个对象中对静态数据成员的值进行了更新,则 所有对象都存取到更新后的相同的值。即所有对象实例共享静态变量,静 态变量有且仅有一个副本。在C + +中静态成员必须初始化,初始化方法是在类外进行,格式为: 数据类型名类名:静态数据成员名=表达式。在C+ +中访问静态成员的方法对public型静态成员有:方法1:类名:静态成员名方法2:对象名静态成员名方法3
32、:对象指针静态成员名例:#include iostream.hclass A_C public:static int x;void print() coutx,M; ;int A_C:x=100;/静态成员的初始化void main() A_C a,b;.print();b.print();A_C:x=200;a.print();b.print();)运行结果为:100,100,200,200在Java中静态成员初始化方法是在类中进行,格式为:存取控制修饰符static数据内型名静态数据成员名=表达式。用静态静态构造器进行初始化,格式为:static 静态数据成员名=表达式;)在Java中访问
33、静态成员的方法方法1:类名.静态成员名(这种方法在对象定义之前或之后均可使用。) 方法2:对象名.静态成员名(这种方法只能在对象定义之后使用。)例:import tio.*;public class A_C public static int x;staticx=100静态构造器进行初始化public void print() System.out.println(x); );public class A_C Testpublic static void main(string args)( 一 A_C a=new A_C();A_C b=new A_C();a.print();b.print
34、();运行结果为:100,100在C#中静态成员初始化方法是在类中进行,格式为: static存取控制修饰符数据内型名静态数据成员名=表达式。用静态构造函数进行,格式为:static 类名()静态数据成员名=表达式;在C#中访问静态成员的方法对public型静态成员有:类名静态成员名例:using Systempublic class A_C public static int x;static A_C()x= 100静态构造函数进行初始化public void print() Console.WriteLine(x); );public class A_C Testpublic static
35、 void Main()(A_C a=new A_C();A_C b=new A_C();a.print();b.print(); 运行结果为:100,100小结在C+中可以通过类名,对象名和对象指针进行访问。在java中可 一通过类名和对象名进行访问。和C+, java不同C#只能用类名来访问 静态数据成员。在java中可以过静态构造器进行初始化也可以直接进行 初始化。在C#中可以通过静态构造函数进行初始化也可以直接进行初始 化。和C#, java不同C+只能通过类名引用静态数据成员名进行初始化。2. 4类中的成员函数2.4.1普通成员函数C+ + :成员函数的一般定义格式:class类名
36、private:lprotected:lpublic:返冋值类型函数名(形参说明表);成员函数说明;返冋值类型 类名:函数名(形参列表)成员函数定义内联成员函数(1) 隐式声明:将函数体直接放在类定义体内。class类名 private:lprotected:lpublic:返回值类型内联函数名(形参列表)函数体;(2)显示声明:类定义体中只有函数说明,无函数体,函数的定义放在 类主体之外,且前面加上inline关键字。class类名 private:lprotected:lpublic:返冋值类型内联函数名(形参表说明););inline返回值类型类名:内联函数名()(函数体);java的成
37、员函数又称为方法,在类中定义的一般格式如下:修饰符返回值类型方法名称(参数表)程序语句注意:用方括号括住的项表可选。修饰符用与定义此方法可被其他类的方 法调用的控制权等级。C#的成员函数也称为方法,在类中定义的一般格式如下:属性修饰符返回值类型方法名称(参数表)程序语)注意:用方括号括住的项表可选。修饰符用与定义此方法可被其他类的方 法调用的控制权等级。下面分别用和C+、Java和C#定义一个复数类程序 Complex.cppclass Complex private:double re,im;public:void SetRe(double x) re=x; void Setlm(doubl
38、e y) im=y; double GetRe() return re; double Getlm() return im; void input();void print(); inline void Complex:input() cinreim; void Complex:print() if(im0) coutvvrev+“vvimvvi”; else coutvvrevvimvvi;下面用Java重新编写这个复数类程序Complex.javaclass Complex private:int re; private int im;public void SetRe(double x)
39、 re=x; public void Setlm(double y) im=y; public int GetRe() return re; public int Getlm() return im; public void input();Bufferedreader br=newBufferedreader(new inputStreameder(Syste,.out) String sl=br.readLine() int re=lnteger.parselnt(s 1)String s2=br.readLine()int im=lnteger.parselnt(s2)public vo
40、id print()if(im0)System.out.print (re+”+im+i”);else System.out.print (re+im+i);;下面用C#重新编写这个复数类程序 Complex.csclass Complex private:double re;private double im;public string datal,data2;public void SetRe(double x) re=x; public void Setlm(double y) im=y; public double GetRe() return re; public double Ge
41、tlm() return im; public void input();datal=Console.ReadLine(); re=double.parselnt(datal) data2= Console.ReadLine();im=double.parselnt(data2)public void print() if(im0)Console.WriteLine (re+t4+,+im+4T,);else Console.WriteLine (re+im+i);) )小结通过前面三个不同版本的复数类。C+不同与Java和C#,它接受文 件作用域方法-C+程序没有封装在类中。C+中的方法,或
42、称函数, 既可以在类内部又可在类外部通过“类名::”的形式定义。定义。Java 和C#中的方法始终包含在类中。如果某个方法需要被多个类调用可以在 其他类中定义同样的方法,然后调用这个新类的方法。和C+不同在C# 和java中依靠标准库来提供输入和输出。2. 4.2静态成员函数为了在不生成类对象的情况下,直接访问静态数据成员,C+ +定义了静态成员函数。定义静态成员函数的格式如下:static返回值类型成员函数名(形参列表);静态成员函数属于整个类,由同一个类的所有对象共同维护。 point#includeclass point point(int xx=O,int yy=0)X=xx;Y=yy
43、;countp+;static void GetC() coutl4object id=,countendl;int point:countp=0void main()point A(4, 5)A. GetCOPoint B(5, 6) point:GetC() ) 该程序的结果是 注意:(1)静态成员函数可以直接访问的数据有:该类中的静态数据成员与静 态函数成员、全局变量和常量;(2)访问类中的非静态数据和函数成员,只能通过参数传递方式得到对 象名,然后通过对象名来访问。例如:classA public: static void f(A a) private: int x;;void A:f
44、(A a)coutx;对的弓I用是错误的couta.x正确由此可见,通过静态成员函数访问非静态成员是相当麻烦的,我们- 般用静态成员函数来访问全局变量或同一个类中的静态数据成员, 特别是 和后者起作用,达到对同一个类中对象之间共享的数据进行维护的目 的。public型静态成员函数有三种调用方法:(1)类名:静态成员函数名(实 参表)(2)对象名.静态成员函数名(实参表)(3)对象指针,静态成员函数名(实参表)在java中的定义静态成员函数的格式如下:static返回值类型方法名(形参列表);在java中类外使用静态方法的格式是:类名方法名(参数)用java来重新编写上面的程序.class po
45、intstatic count=0;point(int xx,int yy)X=xx;Y=yy;countp+;public class pointtestpublic static void main(String args)point A=new point(4, 5)point. GetC()point B=new point(5, 6)point. GetC()从上述格式可以看出,调用静态方法可以不需要对象,通过类名即可以调 用。不可以通过对象进行调用,所以静态方法内部只能出现静态变量和静 态方法。在C#中的定义静态成员函数的格式如下: 方法修饰符static返回值类型方法名(形参列表);在C#中类外使用静态方法的格式是:类名,方法名(参数)对象名.方法名(参数)用C#来重新编写上面的程序.class point(point(int xx=0,int yy=0) X=xx;Y=yy;countp+;static count=0;static void GetC()public class pointtestpublic sta