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

C#的继承、接口、抽象类理解 OOP三特性:继承、封装、多态继承:C#属于单继承,即派生类最多只能有一个直接基类,但可以传递继承,即A类派生B类,B类派生C类,派生类会保留所有基类以及传递基类的字段、属性、方法等所有内容。如果要在派生类中隐藏基类内容,可以通过new关键字实现,或是通过base来调用基类的内容传递继承示例:using System; using System.Collections.Generic; using... 阅读详情

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更适合作为教学用语言,这样更容易帮助学生了解其内部机制。

Java、C#与C++在继承、覆盖、多态及抽象类中的特性对比分析 在现代软件工程中,面向对象编程(OOP)已成为主流的程序设计范式。其四大基本特征——封装、继承、多态与抽象,构成了构建可维护、可扩展系统的基础。要素语法符号是否必需作用继承关键字extends是声明类继承关系访问控制publicprotected/ 默认 /private否(默认包内可见)控制成员可访问范围方法重写@Override否(推荐使用)提供编译时校验,增强代码健壮性构造器链调用super(...) 阅读详情

相关推荐

由Person类派生出学生类Student和教师类Teacher

由Person类派生出学生类Student和教师类Teacher,并为他们添加必要的数据,为这两个派生类编写必要的构造函数和析构函数。然后编写一个主函数对以上功能进行测试。 包括了很多的程序可供您参考!

如何用Java实现类似c/c++指针效果

如何用Java实现类似c/c++指针效果        JAVA作为一门类C语言,已经得到大家的青睐,许多人问过我Java是否也可以用指针,当然这主要是因为他们觉得有了指针,可以省去对象调用的麻烦,但没有想到的是Java语言为何没有设置指针,举个例子: 一个无法实现c/c++指针效果的例子 public class Foo { public static void main(String[

liaokangli_first的专栏 1万+

iTunes登录协议全解析:从抓包到加密参数生成(含HTTPDebugger避坑指南)

本文深度解析iTunes登录协议,提供从环境搭建、绕过反调试机制到捕获网络流量的完整实战指南。重点剖析了如何利用HTTPDebugger等工具进行抓包,并详细解读了核心加密参数X-Apple-ActionSignature的生成逻辑,为网络安全研究员和协议分析工程师提供了一份详尽的逆向分析与协议复现教程。

weixin_28314575的博客 870

int * (*ptr)()怎么理解(指向函数的指针)

先来分析一下int * (*ptr)() 1.由于小括号的运算级比较高,结合方法又是自左向右,所以先运算(*ptr),表明定义了一个指针ptr 2.接下来再运算最右边的小括号(),表明是一个函数 3.接下平再运算* (*ptr)(),表明函数的返回值是一个指针 4.那么int * (*ptr)()表明定义了一个指针变量ptr,它指向一个没有参数,并且返回值是一个整型指针的函数。这就叫做指向函数的

as14569852的博客 1万+

S7-1500与WinCC GroupDisplay组显示的高效配置指南

本文详细介绍了S7-1500 PLC与WinCC GroupDisplay组显示功能的高效配置方法,涵盖报警状态配置、WinCC端组显示控件设置及常见问题排查。通过实战案例和优化建议,帮助工程师快速掌握工业自动化项目中报警信息可视化的关键技术,提升生产线监控效率。

weixin_29292535的博客 441

Windows非分页缓冲池内存泄漏实战:PoolMon与RAMMap高效排查指南

本文详细介绍了Windows系统中非分页缓冲池内存泄漏的实战排查方法。当系统出现卡顿且内存占用异常增长时,通过RAMMap工具快速定位非分页缓冲池异常,并利用PoolMon监控内核内存分配标签,精准锁定泄漏源。文章提供了从确认症状、安装工具到使用findstr命令溯源驱动文件的完整五步排查流程,并总结了常见泄漏标签与解决方案,帮助用户高效解决深层系统内存问题。

weixin_28455801的博客 1014

抽象类和接口 (C#/Java)

抽象类和接口 (C#/Java) C#: 一、抽象类: 抽象类是特殊的类,只是不能被实例化;除此以外,具有类的其他特性;重要的是抽象类可以包括抽象方法,这是普通类所不能的。抽象方法只能声明于抽象类中,且不包含任何实现,派生类必须覆盖它们。另外,抽象类可以派生自一个抽象类,可以覆盖基类的抽象方法也可以不覆盖,如果不覆盖,则其派生类必...

weixin_30920091的博客 134

通达信量化打板选股指标公式源码副图

X_2:=3*LOW;X_13:=4;X_14:=3;X_15:=2;X_16:=1;

gpzb7的博客 4492

intptr java_[转载]C#中int和IntPtr相互转换

方法一、int转IntPtrint i = 12;IntPtr p = new IntPtr(i);IntPtr转intint myi = (int)p;MessageBox.Show(myi.ToString());方法二、int转IntPtrint i = 12;IntPtr p =(IntPtr)iIntPtr转intint myi = (int)p;MessageBox.Show(myi....

weixin_42514750的博客 866

Ubuntu 22.04 实战:为WIFI6网卡Realtek RTL8852BE手动编译驱动指南

本文详细介绍了在Ubuntu 22.04系统上为Realtek RTL8852BE WIFI6网卡手动编译驱动的完整指南。从问题诊断、环境准备到源码获取、编译安装,逐步解决驱动缺失问题,并提供常见问题排查和性能优化建议,帮助用户充分发挥WIFI6网卡性能。

weixin_30808693的博客 482

VASP+机器学习快速收敛AIMD

本文介绍了如何利用VASP结合机器学习技术快速收敛AIMD(从头算分子动力学)模拟。首先,通过训练机器学习力场,生成关键文件如ML_ABN(包含结构数据集)、ML_FFN(存储回归结果)和ML_LOGFILE(记录训练日志)。接着,配置INCAR文件以设置计算参数,包括并行化、分子动力学和机器学习相关参数。KPOINTS文件用于定义K点网格。计算完成后,备份CONTCAR文件作为后续模拟的初始结构。最后,利用训练好的力场文件进行纯机器学习力场分子动力学模拟,并提交任务执行。

qq_44812865的博客 1406

C#和java区别

相同点: 都是面向对象编程的语言,都能够实现面向对象的(封装,继承,多态)思想 不同点: c#中的命名空间是namespace类似于Java中的package(包),在Java中导入包用import而c#中用using。 c#和Java都是从main函数入口的,但是c#中的main函数的首字母必须大写 数据类型:Java跟c#基本都差不多,但是Java的String类型的首字母必须大写,而c#中可以小写也可以大写,还有布尔型,Java中是boolean,c#中是bool。 变量的命

Abrahaml的博客 3105

[VCS]VCS编译及仿真时间分析及加速方法

本文介绍了VCS仿真工具中编译和仿真时间的分析方法及优化策略。首先阐述了使用-simprofile选项生成profileReport.html报告来定位时间消耗点的方法。其次提出了三种优化方案:优化resource_db/config_db使用wildcard、减少debug选项的影响、选择性dump fsdb波形。重点讲解了VCS checkpoint机制,详细说明了其保存/恢复仿真状态的功能、使用方法、与restart的区别,以及如何通过选择性保存、压缩、SSD存储等方式提升效率。最后提出将checkp

元直的博客 1万+

在JAVA和C#中的抽象类和接口的区别

在 C# 和 Java 中,​抽象类和接口的核心概念相似,但具体语法和功能存在一些关键区别。

Rocn666的博客 964

手把手教你学Simulink--基于多能源系统协同控制的复杂场景实例:氢燃料电池+锂电池混合动力电动汽车能量管理仿真

本文介绍了基于Simulink的氢燃料电池与锂电池混合动力电动汽车能量管理系统的建模与仿真方法。系统包含驾驶循环输入、燃料电池子系统、锂电池子系统、能量管理、电机驱动等模块,通过协同控制优化能源分配。详细说明了从模型创建到各子系统设置的7个步骤,并提供了MATLAB代码示例。该仿真可评估不同工况下的系统响应速度、能量利用效率和电池寿命等性能指标,为混合动力汽车的能量管理策略设计和优化提供参考。

MHD0815的博客 240

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

100道C#高频经典面试题带解析答案——全面C#知识点总结

C#(发音为C Sharp)是一种由微软开发的现代、通用、面向对象的编程语言,作为.NET框架的一部分,主要用于开发Windows应用、Web应用、移动应用等。面向对象:支持类、对象、继承、多态、封装等面向对象的特性。类型安全:强类型语言,提供类型检查,减少运行时错误。丰富的类库:提供大量的标准库,简化开发。跨平台:通过.NET Core和.NET 5/6等实现跨平台开发。异步编程:内置支持异步编程模型(async/await),提高应用性能。垃圾回收:自动内存管理,减少内存泄漏和错误。

编程技术探索者,分享C/C++、C#、Java、数据库等开发经验,聚焦实战技巧与AI兴趣,助力编程爱好者成长。 8129

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

java接口比较,Java接口与抽象类的比较

Java接口与抽象类的比较Java接口与抽象类的比较1、 最大的区别:java抽象类可以提供某些方法的部分实现,而java接口不可以。如果向一个抽象类里加入一个新的具体方法,那么他所有的子类都一下子得到了这个新方法,而java接口做不到这一点。如果向一个java接口里面加入一个新方法,所有实现这个接口的类就无法成功通过编译了,因为必须让那个每一个类都再实现这个方法才行,这显然是java接口的缺点...

weixin_42188533的博客 229

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

C# 接口和抽象类的区别

一、抽象类 抽象类是仅供派生的类,无法实例化抽象类,只能实例化它派生的类。 定义抽象类和抽象成员时,要为其添加abstract修饰符。 不可实例化只是抽象类的一个次要的特征,其主要特征是它包含抽象成员。 抽象成员不能声明为私有,否则,派生类无法找到它们。 二、接口 1.和抽象类不同,接口不包含任何实现,而且,接口能把提供的服务和实现细节完全隔离开。 2.关键特点:既不包含实现,也不包含数据。...

mozhi 1976

C#中抽象类的使用和示例

C#中 抽象类 的使用和示例 今天学校在上Java课程时讲到使用abstract(抽象的)修饰符来修饰类使之成为抽象类,于是想到最近在学习c#,虽然说没讲到这块,但是既然Java老师给我提了一个醒,我不在C#这块拓展一下就感觉好像很对不起我们的老师,所以就在网上查阅了相关的资料文献,将C#中抽象类总结了下,下面我们就一起开始探讨吧! abstract 修饰符 1、了解 abstract 是什么意思? abstract 在英语中译为抽象的 2、用这个修饰符来干什么? ​ abstract 修饰符 修饰类名

abraham_ly的博客 1535

【c#入门杂选】继承和抽象类

交流学习!

秩沅 1190

C#和Java的比较

原文 C#(C-Sharp)是Microsoft的新编程语言,被誉为“C/C++家族中第一种面向组件的语言”。然而,不管它自己宣称的是什么,许多人认为C#更像是Java的一种克隆,或者是Microsoft用来替代Java的产品。事实是否是这样的呢? 本文的比较结果表明,C#不止是Java的同胞那么简单。如果你是一个Java开发者,想要学习C#或者了解更多有关C#的知识,那么本文就是你必须把最初

ShanX_s的博客 2731

JAVA与C#的比较[转载]

Java和C#都是编程的语言,它们是两个不同方向的两种语言 相同点: 他们都是面向对象的语言,也就是说,它们都能实现面向对象的思想(封装,继承,多态) 区别: 1.c#中的命名空间是namespace类似于Java中的package(包),在Java中导入包用import而c#中用using。 2.c#和Java都是从main函数入口的,但是c#中的main函数的首字母必须大写,它有四种写...

lxy19880708的专栏 273

C#之抽象类、虚方法、重写、接口、密封类

前言    学了这么长时间的C#,我想说对于这个东东还是不是特别了解它,以至于让我频频郁闷。每次敲代码的时候都没有一种随心所欲的感觉。所以不得不在网上搜集一些资料,look 了 look~ 内容    接触了C#很长时间了,现在总结一下C#类关键字(abstract、virtual、override、sealed(这是新接触的)、new)的使用和它的体现。 1、C#中用abstract

好学若饥,谦卑若愚 2809

Java 和 C#的比较

1。访问控制方面:C#有public、internal、protected、private,比java多了个internal,其实它跟java的包访问差不多,internal表示同一个编译集合(如exe、dll)下的类可以互访。对于protected,java和C#有区别。在java中,protected和包访问级别差不多,即不是私有的。而在C#中,protected和privat...

weixin_34268843的博客 679

C#与java中对抽象类、接口的继承和重写区别

C#: 一、继承 什么是继承:继承是允许重用现有类去创建新类的过程。分类的原则是一个类派生出来的子类具有这个类的所有非私有的属性。 1、继承C#中的类:C#不支持多重继承,C#类始终继承自一个基类(如果未在声明中指定一个基类,则继承自System.Object)。 派生类继承基类的语法如下: using System; public class Person { //这是基

nma_123456的专栏 2558

java中的抽象类与接口的区别_Java中抽象类与接口的区别

抽象类与接口紧密相关。然而接口又比抽象类更抽象,它们之间明显存在区别。那到底存在哪些方面的区别呢?下面学习啦小编给大家讲讲Java中抽象类与接口的区别。一、抽象类在面向对象方法中,抽象类主要用来进行类型隐藏。构造出一个固定的一组行为的抽象描述,但是这组行为却能够有任意个可能的具体实现方式。这个抽象描述就是抽象类,而这一组任意个可能的具体实现则表现为所有可能的派生类。模块可以操作一个抽象体。由于模块...

weixin_29013129的博客 390
上一篇: 1℃ love (1℃的爱情)
下一篇: 数据库连接发展史(转载)
-1悟空1-
博客等级 码龄18年 18粉丝 10原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值