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>方法,私 ...
随机推荐
- SQLite剖析之数据类型
许多SQL数据库引擎(除SQLite之外的各种SQL数据库引擎)使用静态.严格的数据类型.对于静态类型,一个值的数据类型由它的容器,即存储这个值的列来决定.SQLite则使用更加通用的动态类型系统.在 ...
- 旧版青奥遇到的bug
1.Cannot create PoolableConnectionFactory (Unknown database 'yoms') 答:服务器上的库都被人删了. 2.Cannot create P ...
- 解决Xamarin Android墙的问题
Xamarin Android项目在编译时会从google的服务器下载缺失的m2repository相关文件,虽然不明白这是干什么的,但是情况就是Andorid SDK Manager不会去下载这个东 ...
- 如何根据执行计划,判断Mysql语句是否走索引
如何根据执行计划,判断Mysql语句是否走索引
- Python的MySQLdb模块安装
MySQL-python-1.2.1.tar.gz 下载地址:https://pan.baidu.com/s/1kVfH84v 然后解压,打开README(这个其实没有什么鸟用) 里面有安装过程: ...
- Python Day3
一.set集合 集合是一个无序的,不重复的数据组合,它的主要作用如下: 去重,把一个列表变成集合,就自动去重了 关系测试,测试两组数据之前的交集.差集.并集等关系 # 创建数值集合 list_1 = ...
- centos6.5升级python为2.7
今天线上服务器全部升级python环境为python-2.7.6的环境,我采用的方法是ansible+shell,代码如下,友提,Python-2.7.6.tgz.setuptools-14.3.1. ...
- css3 动画效果 总结 不断完善~~
1.transition 动画过程改变某个css属性的效果 (比如宽高 颜色) 语法 transition: all 所有元素 + ...
- 【转】Controllers and Routers in ASP.NET MVC 3
Controllers and Routers in ASP.NET MVC 3 ambilykk, 3 May 2011 CPOL 4.79 (23 votes) Rate: vote 1vote ...
- 【08-23】redis学习笔记
今天开始重拾linux,使用的是ubuntu发行版,主要是想在linux上学习redis,作为服务器端软件天然选择linux啊. 第一次使用ubuntu配置超级管理员密码: su passwd roo ...