国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 學(xué)院 > 開(kāi)發(fā)設(shè)計(jì) > 正文

JAVA與C#經(jīng)典程序比較-- 抽象類(lèi)

2019-11-17 04:09:29
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友
java與C#都是面向?qū)ο蟮恼Z(yǔ)言,它們都有各自的抽象類(lèi),都能實(shí)現(xiàn)多態(tài)性。

一、在JAVA中實(shí)現(xiàn)學(xué)生和老師打招呼的代碼

import java.util.ArrayList;//導(dǎo)入ArrayList集合類(lèi)

/**

     抽象父類(lèi)Person

*/

abstract class Person

{

     String name;//姓名

     int age;//年齡

     Person(String name,int age)

     {

         this.name=name;

         this.age=age;

     }

     //抽象方法sayHi()由子類(lèi)來(lái)實(shí)現(xiàn)

     abstract void sayHi();

}

/**

     學(xué)生類(lèi)繼承了Person也就繼承了父類(lèi)的屬性

     父類(lèi)中含有抽象方法因此在子類(lèi)中要重寫(xiě)父類(lèi)的抽象方法

*/

class Student extends Person

{    

     String hobby;//附加屬性,愛(ài)好

     Student(String name,int age,String hobby)

     {

         super(name,age);

         this.hobby=hobby;

     }

     /**

         重寫(xiě)父類(lèi)中的sayHi()方法

     */

     void sayHi()

     {

         System.out.PRintln("大家好,我是"+name+"同學(xué),今年"+age+"歲了,我喜歡"+hobby);

     }

}

/**

     教師類(lèi)繼承Person

     重寫(xiě)抽象父類(lèi)Person中的抽象方法sayHi()

*/

class Teacher extends Person

{

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

     Teacher(String name,int age,int yearOfService)

     {

         super(name,age);

         this.yearOfService=yearOfService;

     }

     /**

         重寫(xiě)父類(lèi)中的sayHi()方法

     */

     void sayHi()

     {

         System.out.println("大家好,我是"+name+"老師,今年"+age+"歲了,我已經(jīng)工作了"+yearOfService);

     }

}

/**

     測(cè)試類(lèi)

*/

class PersonTest

{

     public static void main(String[] args)

     {

         //生成泛型集合對(duì)象

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

         //生成學(xué)生對(duì)象

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

         //生成教師對(duì)象

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

         //將學(xué)生和教師添加到泛型集合對(duì)象中,自動(dòng)將student和teacher上溯造型為Person對(duì)象

         persons.add(student);

         persons.add(teacher);

         //遍歷集合

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

         {

              persons.get(i).sayHi();

         }

     }

}

二、在C#中實(shí)現(xiàn)學(xué)生和老師打招呼的代碼

using System;

using System.Collections.Generic;

using System.Text;



namespace Person

{

    /// <summary>

    /// 抽象父類(lèi)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()將在子類(lèi)中被重寫(xiě)

        /// </summary>

        public abstract void SayHi();

    }

    /// <summary>

    /// 子類(lèi)Student繼承抽象父類(lèi)Person,重寫(xiě)抽象方法SayHi()

    /// </summary>

    class Student : Person

    {

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

            :base(name,age)

        {

            this.Hobby = hobby;

        }

        //附加屬性,愛(ài)好

        private string hobby;



        public string Hobby

        {

            get { return hobby; }

            set { hobby = value; }

        }

        /// <summary>

        /// 重寫(xiě)父類(lèi)中的SayHi()方法

        /// </summary>

        public override void SayHi()

        {

            string message = string.Format("大家好,我是{0}同學(xué),今年{1}歲了,我喜歡{2}。",this.Name,this.Age,this.Hobby);

            Console.WriteLine(message);

        }

    }

    /// <summary>

    /// 子類(lèi)Teacher繼承抽象父類(lèi)Person,并實(shí)現(xiàn)抽象方法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}歲了,我已經(jīng)工作{2}年了。",this.Name,this.Age,this.YearOfService);

            Console.WriteLine(message);

        }

    }

    class Program

    {

        static void Main(string[] args)

        {

            //實(shí)例化泛型集合對(duì)象

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

            //生成學(xué)生對(duì)象

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

            //生成教師對(duì)象

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

            //將學(xué)生和教師添加到泛型集合對(duì)象中,自動(dòng)將student和teacher上溯造型為Person對(duì)象

            persons.Add(student);

            persons.Add(teacher);

            //遍歷集合

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

            {

                persons[i].SayHi();

            }

            Console.ReadLine();

        }

    }

}



       由上面用兩種語(yǔ)言編寫(xiě)的程序可以看出,它們都很相似,都實(shí)現(xiàn)了同一個(gè)功能就是學(xué)生和老師打招呼介紹自己的行為。它們都用到了抽象類(lèi),在子類(lèi)中都重寫(xiě)了抽象父類(lèi)中的抽象方法,都用到了泛型集合,也都表現(xiàn)出了面向?qū)ο蟮奶匦灾唬鄳B(tài)性。



       只不過(guò)這兩種語(yǔ)言在語(yǔ)法上有許多不同之處。

       

1、  繼承

在JAVA中繼承使用關(guān)鍵字extends,而在C#中繼承使用符號(hào):。

2、  調(diào)用父類(lèi)的構(gòu)造方法(構(gòu)造函數(shù))

在JAVA中在子類(lèi)的構(gòu)造方法中使用super(參數(shù)列表)來(lái)調(diào)用父類(lèi)的構(gòu)造方法,而在C#中在子類(lèi)后面加上:base(參數(shù)列表)。

3、  重寫(xiě)父類(lèi)的抽象方法

              在JAVA中,只需要在子類(lèi)中重寫(xiě)父類(lèi)的抽象方法即可,而在C#中需要在這個(gè)重寫(xiě)的抽象方法前加上關(guān)鍵字override以表明該方法重寫(xiě)了父類(lèi)的方法。

4、  屬性

       在JAVA中只有屬性,而在C#中除了有屬性,還有字段,并且字段設(shè)為私有變量,通過(guò)屬性給這個(gè)私有變量賦值,這樣做的好處就是加強(qiáng)了對(duì)數(shù)據(jù)的校驗(yàn),保證了數(shù)據(jù)的安全性,其實(shí)在JAVA中可以通過(guò)定義set方法和get方法來(lái)實(shí)現(xiàn),只不過(guò)在C#中,微軟增加了屬性,并在屬性中又增加了set訪問(wèn)器和get訪問(wèn)器。

5、  命名規(guī)范

       在JAVA中,變量名和方法名全部采用Camel命名法,類(lèi)名和構(gòu)造方法名采用Pascal命名法;而在C#中私有成員采用Camel命名法,而公有成員采用Pascal命名法。

6、  對(duì)屬性的操作

在JAVA中一般將屬性設(shè)為私有成員,不允許用戶直接對(duì)屬性操作,而在C#中因?yàn)?br>
在屬性中增加了訪問(wèn)器,因此可以對(duì)屬性直接進(jìn)行操作,這樣做的好處之一就是提高了性能。

7、  對(duì)集合的訪問(wèn)

在JAVA中對(duì)集合中對(duì)象的訪問(wèn)一般通過(guò)get方法來(lái)獲得集合中的元素,而在C#中

可以直接通過(guò)索引器來(lái)直接訪問(wèn)集合中的元素,這樣做的好處主要是為了方便用戶訪問(wèn)提高程序的性能。

       

       還有其他很多不同之處這里就不再一一闡述。

      這兩種語(yǔ)言的相同之處:

       

1.         都實(shí)現(xiàn)了面向?qū)ο蟮娜筇匦裕^承、封裝、多態(tài)。

2.         都使用到了最流行的技術(shù):泛型集合。

       

       JAVA的優(yōu)勢(shì):



1.         可以實(shí)現(xiàn)跨平臺(tái)操作,在手機(jī)程序開(kāi)發(fā)方面占有很大的優(yōu)勢(shì)。

2.         SUN公司提供的類(lèi)庫(kù)都是開(kāi)源代碼,這樣就方便了開(kāi)發(fā)人員開(kāi)發(fā)程序。

3.         可以發(fā)揮程序員的創(chuàng)造性,為程序員帶來(lái)成就感。

       

       .NET的優(yōu)勢(shì):



1.         可跨語(yǔ)言語(yǔ)言操作。(據(jù)說(shuō)也可以實(shí)現(xiàn)跨平臺(tái),但我沒(méi)試過(guò),它應(yīng)該還是在windows上的性能表現(xiàn)最佳)

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

3.         微軟提供的開(kāi)發(fā)工具非常棒,操作簡(jiǎn)單容易上手。



       .NET是在JAVA之后發(fā)展起來(lái)的,.NET作為小弟吸收借鑒了大哥的長(zhǎng)處摒棄了其短處,并以高效便捷的開(kāi)發(fā)工具和.NET框架吸引了一大批程序員,但讓人感到不適的地方在于它將很多東西都封裝起來(lái),根本看不到其內(nèi)部機(jī)制,有時(shí)候想改還不知道該如何改。JAVA作為大哥,也有許多要不斷完善的地方。不過(guò)就做為教學(xué)而言,我想與C#.NET比較,JAVA更適合作為教學(xué)用語(yǔ)言,這樣更容易幫助學(xué)生了解其內(nèi)部機(jī)制。
發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 罗平县| 故城县| 昭苏县| 乐昌市| 吉水县| 深圳市| 固阳县| 天等县| 周宁县| 呼玛县| 卢氏县| 东台市| 兰坪| 甘孜县| 尤溪县| 凉山| 来凤县| 延寿县| 韶关市| 广南县| 紫阳县| 荃湾区| 广灵县| 九江县| 嫩江县| 广西| 六盘水市| 永清县| 白水县| 唐河县| 库车县| 会同县| 富锦市| 潜江市| 汉源县| 塘沽区| 上栗县| 凤台县| 绩溪县| 永修县| 金门县|