C#与Java多态方面的语法差异
C++、C#、Java,无奈三种语言让我多次混淆,多次搞清楚,不写个Demo我想还是会忘记的。
就好像是一个满水的杯子,倒掉一点,才能装下更多。
有时候博客就是一个倒水的地方,可以让我们清空自己,然后去装下更多知识。
同时我非常同情还在面试做题的同学,为了应付无聊无用的题目,把自己装满了。
------------------先看一段简单的Java代码--------------------------------------------
public class Father {
/**
* 秀身高
*/
public void showShenGao(){
System.out.println("爸爸的身高是175!");
}
}
public class Son extends Father {
/* (non-Javadoc)
* @see Father#showShenGao()
* 儿子秀身高
*/
public void showShenGao(){
System.out.println("儿子的身高是180!");
}
public static void main(String[] args) {
// TODO Auto-generated method stub
Father father=new Father();
father.showShenGao();
Father human=new Son();
human.showShenGao();
Son son=new Son();
son.showShenGao();
}
}
输出结果很有爱:
“爸爸的身高是175!
儿子的身高是180!
儿子的身高是180!”
实践证明直接是多态的,子类的方法与父类同名,自动override重写,由此可证明父类方法默认为虚virtual。
实际上,我平时在使用的时候经常会搞不清哪些方法override父类方法实现了多态,所以需要加个@Override注解,看起来清楚一点。
------------------------C#的优雅代码-----------------------------------------
public class Father
{
/**
* 秀身高
*/
public virtual void showShenGao(){
Console.WriteLine("爸爸的身高是175!");
}
} public class Son : Father { /* (non-Javadoc)
* @see Father#showShenGao()
* 儿子秀身高
*/
public override void showShenGao(){
Console.WriteLine("儿子的身高是180!");
}
}
输出结果同样很理想:
“爸爸的身高是175!
儿子的身高是180!
儿子的身高是180!”
如果我们去掉子类的override关键字,将会出现一行警告,但编译器不会报错,
输出结果就是
“爸爸的身高是175!
爸爸的身高是175!
儿子的身高是180!”
“警告 Son.showShenGao()”将隐藏继承的成员“Father.showShenGao()”。若要使当前成员重写该实现,请添加关键字 override。否则,添加关键字 new。”
由此证明,C#默认情况下是不支持多态的,子类默认情况下有个new关键字。
所以在多重继承的时候,new或者隐式的new关键字将阻断整个多态的形式,
难道微软希望我们写代码保持简单,默认为新手模式,高手请自行开启virtual。
C#与Java多态方面的语法差异的更多相关文章
- C#与Java的语法差异
C#与Java的语法差异C与Java的语法差异前言程序结构基本语法数据类型字符串变量与常量运算符判断语句循环语句访问权限方法数组结构枚举类继承多态运算符重载接口命名空间预处理器指令正则表达式异常IO泛 ...
- C++、Java语法差异对照表
C++.Java语法差异对照表 C++ and Java Syntax Differences Cheat Sheet First, two big things--the main function ...
- Kotlin VS Java:基本语法差异
Kotlin比Java更年轻,但它是一个非常有前途的编程语言,它的社区不断增长. 每个人都在谈论它,并说它很酷. 但为什么这么特别? 我们准备了一系列文章,分享我们在Kotlin开发Android应用 ...
- 深入理解java多态没有烤山药的存在,java就不香了吗?
目录 1. 从吃烤山药重新认识多态 2. 多态前提条件[重点] 3. 多态的体现 4. 多态动态绑定与静态绑定 5. 多态特性的虚方法(virtual) 7. 向上转型 8. 向下转型 9. 向上向下 ...
- Java多态的6大特性|乐字节
大家好,我是乐字节的小乐,前几天讲完了Java继承,接下来我们会讲述Java多态. 以上就是本次学习的6大任务.我们依次来看. 一. Object类 Object类是所有Java类的根基类. 如果在类 ...
- Java多态的实现机制是什么,写得非常好!
作者:crane_practice www.cnblogs.com/crane-practice/p/3671074.html Java多态的实现机制是父类或接口定义的引用变量可以指向子类或实现类的实 ...
- Java 多态——与C++的比较
学习了Java和C++之后,由于长期不使用C++,而java的基础知识掌握不牢,现在已经搞不清java多态了.现在先来谈谈java多态,稍后有时间再更新C++的多态,并进行比较~ 一. Java的多态 ...
- C++和java多态的区别
C++和java多态的区别 分类: Java2015-06-04 21:38 2人阅读 评论(0) 收藏 举报 转载自:http://www.cnblogs.com/plmnko/archive ...
- 深入理解Java多态机制
从字节码层面来看,Java中的所有方法调用,最终无外乎转换为如下几条调用指令. invokestatic: 调用静态方法. invokespecial: 调用实例构造器<init>方法,私 ...
随机推荐
- LeetCode:Max Points on a Line
题目链接 Given n points on a 2D plane, find the maximum number of points that lie on the same straight l ...
- .Net JIT
.Net JIT(转) JIT
- IoC 与 AOP (谈谈你对 Spring 的理解)
一.Spring 实现了工厂模式的工厂类,这个类名为BeanFactory(实际上是一个接口),在程序中通常 BeanFactory 的子类 ApplicationContext. Spring相当于 ...
- DayPilot 7.9.3373 去掉DEMO
更新升级倒是蛮快的,多了Gantt图,此处下载先: http://files.cnblogs.com/files/pccai/DayPilot_2.0_4.0_7.9.3373.rar
- JAVA的垃圾回收机制
1. 垃圾回收的意义 在C++中,对象所占的内存在程序结束运行之前一直被占用,在明确释放之前不能分配给其它对象:而在Java中,当没有对象引用指向原先分配给某个对象的内存时,该内存便成为垃圾.JVM的 ...
- Mac上更新Ruby
因为准备在项目中使用bootstrap,在安装bootstrap过程中提示需要Ruby的版本在1.9.2以上,而目前使用的Ruby版本是Mac系统自带的1.8.7.所以需要对Ruby进行升级.这里使用 ...
- SingleTon单例模式总结篇
在Java设计模式中,单例模式相对来说算是比较简单的一种构建模式.适用的场景在于:对于定义的一个类,在整个应用程序执行期间只有唯一的一个实例对象. 一,懒汉式: 其特点是延迟加载,即当需要用到此单一实 ...
- 平衡二叉查找树(AVL)的理解与实现
AVL树的介绍 平衡二叉树,又称AVL(Adelson-Velskii和Landis)树,是带有平衡条件的二叉查找树.这个平衡条件必须要容易保持,而且它必须保证树的深度是 O(log N).一棵AVL ...
- Sql简单封装
public class SqlHelper { public static string SqlConnectionStr = ConfigurationManager.ConnectionStri ...
- Mac Sublime Text complie python .py error /bin/bash: shell_session_update: command not found
1.get the rvm version rvm -v 2.make sure the version at least 1.26 above. 3.then go ahead rvm get he ...