C#与Java(一)************************************************关键字:继承难易度:易************************************************最近因为工作需要开展基于C#的研发。我在这里也就写一点作为Java程序员对于C#的部分感想吧。毕竟能力有限,请各位高手多多点拨。1.1实现的继承C#和Java一样不能继承private。但是C++可以在继承中明确指出要继承共有的还是私有的。如下:这个是C#的继承书写方法,作为基类的CSharpBaseClass并没有限定符。
这个是Java了,熟悉吧。
C++的定义如下:
1.2虚函数把一个基类函数声明为virtual,该函数就可以在任何派生类中重写了。Java的语法中没有virtual这个词,但是Java却彻彻底底的贯彻着这个概念,Java的所有函数都是虚拟的。C++的朋友可能比较熟悉这个词吧。对于这一点C#和C++是相同的。但是语法稍微有点不同,C#需要使用override类显示声明重写函数。如下例
1.3隐藏方法相同签名的方法在基类和子类都声明了,但方法不是vitrual。那么实际中到底哪个方法被执行,取决于引用实例的变量类型,而不是实力本身的类型。我们也不用太担心这个问题,因为C#会在编译期给出警告。1.4调用积累函数的方法java中我们使用super,C#中使用base。1.5抽象类和抽象函数和java一样使用abstract声明。和C++相比,C++的抽象函数被声明为纯虚函数。1.6密封类和密封方法在Java中我们把它叫做final。也就是不能继承的类或不能重载的方法。
1.7构造函数的调用层次和Java一样,我就不多说了。这里强调一个特殊的语法格式:
结果如预计那样 :如果基类含有带参数的构造函数,派生类不能调用默认基类构造函数。多参数派生类构造函数,可以调用参数数目不同的基类构造函数。我们一起来看看为什么这2个结论可以成立:首先,对于带参数的基类构造函数在初始化的时候会试图去调用基类默认构造函数,但在上边的基类程序里,因为只声明了带一个参数的构造函数,所以public Second(string f):base()或者public Second(string f)就不会通过编译,因为他找不到基类的默认构造函数,只能追加public BaseClass()才会通过。这一点和JAVA是不同的,java的默认构造函数默认是不出现在代码里的。C#却一定要写出来。<<<== 有错误。C#的默认构造函数体制和Java是一样的。具体如下:1。父类没有自定义构造函数的情况下,使用默认构造函数。用户可以不写出来。2。一旦父类有了自定义的构造函数,那么如果要使用无参的默认构造函数就必须要显示定义。其次,下边派生类1个参数、2个参数甚至多个参数的构造函数为什么能访问只有一个参数的基类构造函数呢?原因是,关键字this,上边的程序改写如下我想大家就明白了。
2.1修饰符C#支持下边的集中修饰符:public , protected , internal ,private , protected internal同Java。internal和protected internal是.net framework新增的一个内容。根据定义。internal在同一个程序集内和public类似,不同的程序集间,public声明的类或方法仍然可用,但是internal的方法或类则被隐藏。protected internal合并了protected 和internal,但这是一种or关系,而不是and关系。protected internal成员在同一个程序集的任何代码都可见,在派生类可见。2.3接口接口公约:不能实例化接口。接口不能有构造函数或字段。接口定义也不允许包含运算符重载。接口定义中还不允许声明成员上的修饰符。接口成员都是public的,不需要static也不需要virtual。同Java接口可以彼此继承,其方式和类继承相同。如下:
告一段落吧。 (つづく)请多提意见,如果有什么不清楚的地方也请你写下来,一起调查咯。
Powered by: BlogJava Copyright © -=Kinohl=-