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>方法,私 ...
随机推荐
- java8日期时间
###与时间有关的5个包* java.time* java.time.chrono* java.time.format* java.time.temporal* java.time.zone###ja ...
- SQL Linq lamda区别
SQL LINQ Lambda SELECT * FROM HumanResources.Employee from e in Employees select e Employees .Sele ...
- bzoj1588
splay #include<cstdio> #include<cstring> #include<algorithm> using namespace std; ...
- 光盘刻录 CD刻录软件 Ashampoo Burning Studio特别版 刻录CD就这么简单
著名的刻录软件Nero,其近上百M体积实在太大,而且安装之后的文件体积也有上G多.这么大的体积安装使用都不方便,好在现在很多都做得很不错,比如阿香婆的光盘刻录软件Ashampoo® Burning S ...
- c# DES加密解密
class DESHelper { string _iv = "9AUP"; string _key = "9d"; /// <summary> / ...
- Python 安装easy_install详解
easy_install 真的特别方便.我之前安装pip.wheel.bs4.requests等都是用python setup.py install 安装,操作步骤还不算很烦(但是对比easy_ins ...
- UIActivityViewController 系统社交化 共享
1.UIActivityViewController是继承自UIViewController,是拥有VC的特性 a.初始化 init , initWithActivityItems:applicat ...
- <<< Jquery查找元素、选择器使用方法总结
$("#myDiv"); //根据给定的ID匹配一个元素,用于搜索id 属性中给定的值,id属性必须是唯一的 $("div"); //根据给定的元素名匹配所有元 ...
- AE开发中栅格图层实现分级渲染
GP工具IDW执行后,生成的栅格图层是黑白二色,需要手动进行分级渲染,似乎不是所有栅格图层都可以进行分级渲染,注意异常处理.注意ARCMAP中是有颜色的,无需自己处理. IRasterClassify ...
- HTML5学习笔记(持续更新中....)
平时的工作中,不知不觉我们应用了很多HTML5,但当正儿八经问起来你对HTML5了解多少,很多时候都有点懵. 做个简单的HTML5总结.包括简介.要学的知识点.凌乱的知识点 HMTL5简介 定义:ht ...