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

发表于:2013-6-07 09:41

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:红枫海    来源:51Testing软件测试网采编

分享:

  三大特性-继承

  继承:目的是为了让一个类拥有另一个类的属性和方法。

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

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

22/2<12
100家互联网大公司java笔试题汇总,填问卷领取~

精彩评论

  • zhghuxin
    2013-6-07 17:59:03

    抛个榴莲,接着~~~~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号