WEB开发网      濠电姷鏁告慨鐑藉极閸涘﹦绠鹃柍褜鍓氱换娑欐媴閸愬弶鎼愮痪鍓ф嚀閳规垿鎮╃€圭姴顥濋梺姹囧€楅崑鎾诲Φ閸曨垰绠涢柛顐f礃椤庡秹姊虹粙娆惧剳闁哥姵鍔欐俊鐢稿礋椤栨艾鍞ㄩ梺闈浤涙担鎻掍壕闁圭儤顨嗛埛鎺楁煕閺囥劌浜滄い蹇e弮閺屸€崇暆鐎n剛鏆犻柧浼欑到閵嗘帒顫濋悡搴d画缂佹鍨垮缁樻媴缁涘娈┑顔斤公缁犳捇銆佸鎰佹▌濠电姭鍋撳ù锝囩《閺€浠嬫煟濡鍤嬬€规悶鍎辫灃闁绘ê寮堕崯鐐电磼閸屾氨效鐎规洘绮忛ˇ瀵哥棯閹佸仮鐎殿喖鐖煎畷鐓庘槈濡警鐎崇紓鍌欑劍椤ㄥ棗鐣濋幖浣歌摕闁绘棃顥撻弳瀣煟濡も偓閻楀棗鈻撳Δ鍛拺閻犲洠鈧櫕鐏€闂佸搫鎳愭慨鎾偩閻ゎ垬浜归柟鐑樼箖閺呮繈姊洪棃娑氬婵☆偅鐟╅、娆掔疀閺冨倻鐦堥梺姹囧灲濞佳勭閿曞倹鐓曢柕濞垮劤閸╋絾顨ラ悙鏉戝妤犵偞锕㈤、娆撴嚃閳哄骞㈤梻鍌欐祰椤鐣峰Ο鑲╃煋妞ゆ棁锟ユ禍褰掓煙閻戞ɑ灏ù婊冪秺濮婅櫣绱掑Ο铏逛桓闂佹寧娲嶉弲娑滅亱闂佸憡娲﹂崹閬嶅煕閹达附鐓欓柤娴嬫櫅娴犳粌鈹戦垾鐐藉仮闁诡喗顨呴埥澶愬箳閹惧褰囩紓鍌欑贰閸犳牠顢栭崨鎼晣闁稿繒鍘х欢鐐翠繆椤栨粎甯涙繛鍛喘濮婄粯鎷呴悷閭﹀殝缂備浇顕ч崐鍨嚕缂佹ḿ绡€闁搞儯鍔嶅▍鍥⒑缁嬫寧婀扮紒瀣崌瀹曘垽鎮介崨濠勫幗闁瑰吋鐣崹濠氬煀閺囥垺鐓ユ慨妯垮煐閻撶喖鐓崶銉ュ姢缂佸宕电槐鎺旂磼濡偐鐣虹紓浣虹帛缁诲牆鐣峰鈧俊姝岊槺缂佽鲸绻堝缁樻媴缁涘娈愰梺鎼炲妺閸楀啿鐣烽鐐茬骇闁瑰濮靛▓楣冩⒑缂佹ɑ鈷掗柍宄扮墦瀵偊宕掗悙瀵稿幈闂佹娊鏁崑鎾绘煛閸涱喚鎳呮俊鍙夊姇铻i悶娑掑墲閺傗偓闂備胶绮崝鏇炍熸繝鍥у惞闁绘柨鐨濋弨鑺ャ亜閺冨洦顥夐柛鏂诲€濋幗鍫曟倷閻戞ḿ鍘遍梺鍝勬储閸斿本鏅堕鐐寸厱婵炲棗绻掔粻濠氭煛鐏炵晫效鐎规洦鍋婂畷鐔碱敆閳ь剙鈻嶉敐鍥╃=濞达絾褰冩禍鐐節閵忥絾纭炬い鎴濇川缁粯銈i崘鈺冨幍闁诲孩绋掑玻璺ㄧ不濮椻偓閺屻劌鈽夊Ο澶癸絾銇勯妸锝呭姦闁诡喗鐟╅、鏃堝礋椤撴繄绀勯梻鍌欐祰椤曟牠宕伴弽顐ょ濠电姴鍊婚弳锕傛煙椤栫偛浜版俊鑼额嚙閳规垿鍩勯崘銊хシ濡炪値鍘鹃崗妯侯嚕鐠囨祴妲堥柕蹇曞閳哄懏鐓忓璺虹墕閸旀挳鏌涢弬娆炬Ш缂佽鲸鎸婚幏鍛矙鎼存挸浜鹃柛婵勫劤閻挾鎲搁悧鍫濈瑨闁哄绶氶弻鐔煎礈瑜忕敮娑㈡煛閸涱喗鍊愰柡灞诲姂閹倝宕掑☉姗嗕紦 ---闂傚倸鍊搁崐鎼佸磹閻戣姤鍊块柨鏃堟暜閸嬫挾绮☉妯哄箻婵炲樊浜滈悡娑㈡煕濞戝崬骞樻い鏂挎濮婅櫣鎹勯妸銉︾彚闂佺懓鍤栭幏锟�
开发学院WEB开发Jsp JAVA与C#经典程序比较-- 抽象类 阅读

JAVA与C#经典程序比较-- 抽象类

 2009-10-28 20:53:49 来源:WEB开发网 闂傚倸鍊搁崐鎼佸磹妞嬪孩顐芥慨姗嗗厳缂傛氨鎲稿鍫罕闂備礁婀遍搹搴ㄥ窗閺嶎偆涓嶆い鏍仦閻撱儵鏌i弴鐐测偓鍦偓姘炬嫹闂傚倸鍊搁崐鎼佸磹妞嬪海鐭嗗〒姘e亾妤犵偛顦甸弫鎾绘偐閹绘帞鈧參姊哄Ч鍥х仼闁诲繑鑹鹃悾鐑藉蓟閵夛妇鍘甸梺瑙勵問閸犳牠銆傛總鍛婄厱閹艰揪绱曟牎闂侀潧娲ょ€氫即鐛幒妤€绠f繝闈涘暙娴滈箖鏌i姀鈶跺湱澹曟繝姘厵闁绘劦鍓氶悘杈ㄤ繆閹绘帞澧涚紒缁樼洴瀹曞崬螖閸愬啠鍓濈换娑樼暆婵犱胶鏁栫紓浣介哺閹瑰洤鐣烽幒鎴僵闁瑰吀鐒﹂悗鎼佹⒒娴g儤鍤€闁搞倖鐗犻獮蹇涙晸閿燂拷濠电姷鏁告慨鐑藉极閸涘﹥鍙忔い鎾卞灩缁狀垶鏌涢幇闈涙灈鐎瑰憡绻冮妵鍕箻鐎靛摜鐣奸梺纭咁潐濞茬喎顫忕紒妯肩懝闁逞屽墮宀h儻顦查悡銈夋煏閸繃鍋繛宸簻鎯熼梺瀹犳〃閼冲爼宕濋敃鈧—鍐Χ閸℃鐟愰梺鐓庡暱閻栧ジ宕烘繝鍥у嵆闁靛骏绱曢崢顏堟⒑閹肩偛鍔楅柡鍛⊕缁傛帟顦寸紒杈ㄥ笚濞煎繘鍩℃担閿嬵潟闂備浇妗ㄩ悞锕傚箲閸ヮ剙鏋侀柟鍓х帛閺呮悂鏌ㄩ悤鍌涘闂傚倸鍊搁崐鎼佸磹妞嬪孩顐芥慨姗嗗厳缂傛氨鎲稿鍫罕闂備礁婀遍搹搴ㄥ窗閺嶎偆涓嶆い鏍仦閻撱儵鏌i弴鐐测偓鍦偓姘炬嫹  闂傚倸鍊搁崐鎼佸磹閻戣姤鍤勯柤鍝ユ暩娴犳氨绱撻崒娆掑厡缂侇噮鍨堕妴鍐川閺夋垹鍘洪悗骞垮劚椤︻垶宕¢幎鑺ョ厪闊洦娲栨牎闂佽瀵掗崜鐔奉潖閾忓湱纾兼俊顖氭惈椤秴顪冮妶鍡楀闁告鍥х叀濠㈣泛谩閻斿吋鐓ラ悗锝庡厴閸嬫挻绻濆顓涙嫼閻熸粎澧楃敮鎺撶娴煎瓨鐓曢柟鎯ь嚟閳藉鏌嶇紒妯荤叆妞ゎ偅绻堥幊婊呭枈濡顏归梻鍌欑閹诧紕绮欓幋锔哄亼闁哄鍨熼弸鏃堟煛閸愶絽浜剧紓浣虹帛缁嬫挻绂掗敃鍌氱<婵﹩鍓﹂悗鎶芥⒒娴e摜锛嶇紒顕呭灦楠炴垿宕堕鍌氱ウ闁诲函缍嗘禍鏍绩娴犲鐓欓梺顓ㄧ畱婢ь垱銇勯弬鍨偓瑙勭┍婵犲洦鍊锋い蹇撳閸嬫捇寮借濞兼牕鈹戦悩瀹犲闁稿被鍔庨幉姝岀疀濞戞ḿ鐤呴梺鍦檸閸犳寮查幖浣圭叆闁绘洖鍊圭€氾拷
核心提示:java与C#都是面向对象的语言,它们都有各自的抽象类,JAVA与C#经典程序比较-- 抽象类,都能实现多态性,一、在JAVA中实现学生和老师打招呼的代码import java.util.ArrayList;//导入ArrayList集合类/** 抽象父类Person*/abstract class Person{ S
java与C#都是面向对象的语言,它们都有各自的抽象类,都能实现多态性。

一、在JAVA中实现学生和老师打招呼的代码

import java.util.ArrayList;//导入ArrayList集合类

/**

   抽象父类Person

*/

abstract class Person

{

   String name;//姓名

   int age;//年龄

   Person(String name,int age)

   {

     this.name=name;

     this.age=age;

   }

   //抽象方法sayHi()由子类来实现

   abstract void sayHi();

}

/**

   学生类继承了Person也就继承了父类的属性

   父类中含有抽象方法因此在子类中要重写父类的抽象方法

*/

class Student extends Person

{  

   String hobby;//附加属性,爱好

   Student(String name,int age,String hobby)

   {

     super(name,age);

     this.hobby=hobby;

   }

   /**

     重写父类中的sayHi()方法

   */

   void sayHi()

   {

     System.out.PRintln("大家好,我是"+name+"同学,今年"+age+"岁了,我喜欢"+hobby);

   }

}

/**

   教师类继承Person

   重写抽象父类Person中的抽象方法sayHi()

*/

class Teacher extends Person

{

   int yearOfService;//附加属性,工作年限

   Teacher(String name,int age,int yearOfService)

   {

     super(name,age);

     this.yearOfService=yearOfService;

   }

   /**

     重写父类中的sayHi()方法

   */

   void sayHi()

   {

     System.out.println("大家好,我是"+name+"老师,今年"+age+"岁了,我已经工作了"+yearOfService);

   }

}

/**

   测试类

*/

class PersonTest

{

   public static void main(String[] args)

   {

     //生成泛型集合对象

     ArrayList<Person> persons = new ArrayList<Person>();

     //生成学生对象

     Student student = new Student("张三",22,"唱歌");

     //生成教师对象

     Teacher teacher = new Teacher("李四",44,10);

     //将学生和教师添加到泛型集合对象中,自动将student和teacher上溯造型为Person对象

     persons.add(student);

     persons.add(teacher);

     //遍历集合

     for(int i=0;i<persons.size();i++)

     {

       persons.get(i).sayHi();

     }

   }

}

二、在C#中实现学生和老师打招呼的代码

using System;

using System.Collections.Generic;

using System.Text;



namespace Person

{

  /// <summary>

  /// 抽象父类Person

  /// </summary>

  abstract class Person

  {

    public Person(string name,int age)

    {

      this.Name = name;

      this.Age = age;

    }

    //姓名

    private string name;



    public string Name

    {

      get { return name; }

      set { name = value; }

    }

    //年龄

    private int age;



    public int Age

    {

      get { return age; }

      set { age = value; }

    }

    /// <summary>

    /// 抽象方法SayHi()将在子类中被重写

    /// </summary>

    public abstract void SayHi();

  }

  /// <summary>

  /// 子类Student继承抽象父类Person,重写抽象方法SayHi()

  /// </summary>

  class Student : Person

  {

    public Student(string name, int age, string hobby)

      :base(name,age)

    {

      this.Hobby = hobby;

    }

    //附加属性,爱好

    private string hobby;



    public string Hobby

    {

      get { return hobby; }

      set { hobby = value; }

    }

    /// <summary>

    /// 重写父类中的SayHi()方法

    /// </summary>

    public override void SayHi()

    {

      string message = string.Format("大家好,我是{0}同学,今年{1}岁了,我喜欢{2}。",this.Name,this.Age,this.Hobby);

      Console.WriteLine(message);

    }

  }

  /// <summary>

  /// 子类Teacher继承抽象父类Person,并实现抽象方法SayHi

  /// </summary>

  class Teacher : Person

  {

    public Teacher(string name,int age,int yearOfService)

      :base(name,age)

    {

      this.YearOfService = yearOfService;

    }



    //工作年限

    private int yearOfService;



    public int YearOfService

    {

      get { return yearOfService; }

      set { yearOfService = value; }

    }

    public override void SayHi()

    {

      string message = string.Format("大家好,我是{0}老师,今年{1}岁了,我已经工作{2}年了。",this.Name,this.Age,this.YearOfService);

      Console.WriteLine(message);

    }

  }

  class Program

  {

    static void Main(string[] args)

    {

      //实例化泛型集合对象

      List<Person> persons = new List<Person>();

      //生成学生对象

      Student student = new Student("张三", 22, "唱歌");

      //生成教师对象

      Teacher teacher = new Teacher("李四", 44, 10);

      //将学生和教师添加到泛型集合对象中,自动将student和teacher上溯造型为Person对象

      persons.Add(student);

      persons.Add(teacher);

      //遍历集合

      for (int i = 0; i < persons.Count; i++)

      {

        persons[i].SayHi();

      }

      Console.ReadLine();

    }

  }

}



    由上面用两种语言编写的程序可以看出,它们都很相似,都实现了同一个功能就是学生和老师打招呼介绍自己的行为。它们都用到了抽象类,在子类中都重写了抽象父类中的抽象方法,都用到了泛型集合,也都表现出了面向对象的特性之一-多态性。



    只不过这两种语言在语法上有许多不同之处。

    

1、 继承

在JAVA中继承使用关键字extends,而在C#中继承使用符号:。

2、 调用父类的构造方法(构造函数)

在JAVA中在子类的构造方法中使用super(参数列表)来调用父类的构造方法,而在C#中在子类后面加上:base(参数列表)。

3、 重写父类的抽象方法

       在JAVA中,只需要在子类中重写父类的抽象方法即可,而在C#中需要在这个重写的抽象方法前加上关键字override以表明该方法重写了父类的方法。

4、 属性

    在JAVA中只有属性,而在C#中除了有属性,还有字段,并且字段设为私有变量,通过属性给这个私有变量赋值,这样做的好处就是加强了对数据的校验,保证了数据的安全性,其实在JAVA中可以通过定义set方法和get方法来实现,只不过在C#中,微软增加了属性,并在属性中又增加了set访问器和get访问器。

5、 命名规范

    在JAVA中,变量名和方法名全部采用Camel命名法,类名和构造方法名采用Pascal命名法;而在C#中私有成员采用Camel命名法,而公有成员采用Pascal命名法。

6、 对属性的操作

在JAVA中一般将属性设为私有成员,不允许用户直接对属性操作,而在C#中因为

在属性中增加了访问器,因此可以对属性直接进行操作,这样做的好处之一就是提高了性能。

7、 对集合的访问

在JAVA中对集合中对象的访问一般通过get方法来获得集合中的元素,而在C#中

可以直接通过索引器来直接访问集合中的元素,这样做的好处主要是为了方便用户访问提高程序的性能。

    

    还有其他很多不同之处这里就不再一一阐述。

   这两种语言的相同之处:

    

1.     都实现了面向对象的三大特性-继承、封装、多态。

2.     都使用到了最流行的技术:泛型集合。

    

    JAVA的优势:



1.     可以实现跨平台操作,在手机程序开发方面占有很大的优势。

2.     SUN公司提供的类库都是开源代码,这样就方便了开发人员开发程序。

3.     可以发挥程序员的创造性,为程序员带来成就感。

    

    .NET的优势:



1.     可跨语言语言操作。(据说也可以实现跨平台,但我没试过,它应该还是在windows上的性能表现最佳)

2.     增加了很多特性,提高了性能,例如:属性、索引器等。

3.     微软提供的开发工具非常棒,操作简单容易上手。



    .NET是在JAVA之后发展起来的,.NET作为小弟吸收借鉴了大哥的长处摒弃了其短处,并以高效便捷的开发工具和.NET框架吸引了一大批程序员,但让人感到不适的地方在于它将很多东西都封装起来,根本看不到其内部机制,有时候想改还不知道该如何改。JAVA作为大哥,也有许多要不断完善的地方。不过就做为教学而言,我想与C#.NET比较,JAVA更适合作为教学用语言,这样更容易帮助学生了解其内部机制。

Tags:JAVA 经典 程序

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接