C#&java重学笔记(面向对象)
C#部分
1.C#有一个internal关键字,指字段可以同一个程序集中访问,出了程序集不行。还有一个protected internal(没有先后之分)修饰词,指只能在同一个程序集中的子类访问
2.abstract和virtual修饰词:
abstract用来修饰类和方法,表 抽象。抽象类中的方法可以不抽象,但是抽象方法所在的类必抽象。且抽象方法不得被实现,即不能用{}表示函数体。而且抽象类只有被继承才能体现它的作用,同时子类必须override父类的抽象方法!
virtual用来修饰方法,表 虚,虚方法必须要有函数体,子类也可以不去override它直接调用。但是如果在自己的作用域中覆写,最好加上override关键字,虽然不报错,但是会报警告。虚方法的出现达成了OO的多态性。
3.接口的继承:接口的书写和抽象方法类似,使用interface修饰词,里面定义的方法不能用{}表示出函数体。而接口中的属性只能象征性的指出get set
类继承接口:类继承了接口就必须要实现接口中的所有方法及属性,否则编译失败。
接口继承接口:继承的接口不必实现父接口中的方法,只需写出自己的属性和方法即可。
继承的接口间或接口与父类间方法属性重名的问题:最好不要重名!
4.子类重写父类的方法:如果父类的方法没有标记 abstract、virtual,子类重写父类方法会报出警报,但是也可以运行。
5.父类有构造函数,子类继承后的问题:如果父类定义无参和有参的构造函数,子类按正常写法写构造函数即可。如父类忽略无参构造函数,则子类书写构造函数时需要 :base(参数名)
6.类中的静态方法静态属性,实例和子类不能访问,只能父类自身访问。
7.子类同时集成接口和父类的时候,父类一定要写在接口前面。java中也是一样。
8.用abstract和sealed修饰接口是没用的。
9.C#可以定义内部类,可以实现类的嵌套,在外部类外面声明内部类的对象,需要:classFather.classSon a=new classFather.classSon();
Java部分:
1.java的修饰词分为四种:public private protected 和默认权限(default),default权限也叫包权限,同一个包中的可以访问。
2.java中没有属性的概念,对于私有字段,java会要求你定义对于私有字段的get和set方法,虽然不定义也不会报错,但是会给你警告。而在类的其他方法中为私有字段赋值是不妥的。
3.java中的构造方法和C#中的构造方法写法一致。即和类同名,且只有一个表示权限的修饰词。
4.java中继承使用extends关键字,C#则用:号。java也是单继承,接口多继承。继承接口使用implements关键字,多个接口用','隔开。
5.java中没有virtual关键字,而且子类重写父类的方法也没有什么限制。
6.java中子类继承有构造方法的父类,和C#的处理方法类似,需要用super关键字,在类体重,super(父类的构造字段); 和base类似,但是书写位置不同于base。
7.java中没有override关键字,使重写和覆写在书写上简化。初学者易混淆。
8.java中没有sealed关键字,和sealed相同意义的是final。但是final和sealed又不相同,final表示:值类型的空间及值不会改变,而引用类型的引用不会变,值可以被其他方法修改。
9.java中的内部类在外部类外面声明的方法是这样的:classFather a=new calssFather();a.classSon b=new a.classSon();同时,只有顶层类可以声明static成员。如果内部类需要定义static成员,则该内部类必须声明为static,否则,一般内部类的成员不能被声明为static。
10.java中会将基本类型封装在Wrapper类中,而JavaScript对基本类型的封装和C#类似。
11.所谓的匿名类就是直接 new (实现的借口或父类名){something.......};这样的类及其对象只能用一次。所以在声明后需要立即调用里面的方法。如下:
public class deleSon extends delegate
{
public int key=10; public void say(Object o)
{
System.out.println(o);
}
public static void main(String args[])
{
deleSon obj=new deleSon();
obj.say(new Object()
{
public String sayName()
{
return "xixi";
} }.sayName());
System.out.println(obj.getKey());
} }
12.static方法不能够被重写。
13.java中有{}块这种东西,且最先执行。甚至还有static{} 静态块,是最先执行的。而C#中没有。
14.java中的匿名类如果调用外部类的变量的时候该变量需要用 final修饰,已确保引用的变量不会随意更改。
C#&java重学笔记(面向对象)的更多相关文章
- C#&java重学笔记(变量与操作符)
声明:自用参看读物 C#部分 1.C#中的byte和sbyte并不是二进制的比特,而是无符号 和 有符号的 8位整数. 2.decimal和float double都用来表示小数,前者用e的10的几次 ...
- C#&Java重学笔记(集合比较和转换)
C#部分: 1.C#中集合有三种,数组类,ArrayList,和字典键值对类,一般也可以自定义集合,但是自定义集合的类型也只有这三类. 2.自定义集合实现三类集合的方法:前两者需要继承Collecti ...
- C#&java重学笔记(函数)
C#部分 1.写在函数定义的()中的关键字: a.params关键字:用来满足函数的参数为数组时,而数组的长度不固定的情况.且该关键字只能用来修饰数组型参数.这样一修饰,就达成了类似JavaScri ...
- C#&java重学笔记(泛型)
C#部分: 1.泛型的出现主要用于解决类.接口.委托.方法的通用性,通过定义泛型类.接口.委托.方法,可以让不同类型的数据使用相同运算规则处理数据,方便了开发. 2.利用System.Nullable ...
- Java菜鸟学习笔记--面向对象篇(十五):Wrapper Class包装类
什么是包装类? 在Java里一切都是对象,除了Java中的基本数据类型(byte,short,int,long,char,float,double,boolean)不是面向对象的,这在实际使用时存在很 ...
- Java菜鸟学习笔记--面向对象篇(十八):对象转型&多态
Polymorphism[多态] 简述: 面向对象多态性指的是:发送消息给某个对象,让该对象自行决定响应何种行为. 通过将子类对象引用赋值给超类对象引用变量来实现动态方法调用 多态的三个前提条件: 多 ...
- Java菜鸟学习笔记()--面向对象篇(七):Wrapper Class包装类
什么是包装类? 在Java里一切都是对象,除了Java中的基本数据类型(byte,short,int,long,char,float,double,boolean)不是面向对象的,这在实际使用时存在很 ...
- Java菜鸟学习笔记--面向对象篇(十六):Object类方法
Object类 什么是Object类? Object类是所有Java类的祖先,每个类都使用 Object 作为超类,所有对象(包括数组)都实现这个类的方法Object类是类层次结构的根,Object类 ...
- 重学前端--js是面向对象还是基于对象?
重学前端-面向对象 跟着winter老师一起,重新认识前端的知识框架 js面向对象或基于对象编程 以前感觉这两个在本质上没有什么区别,面向对象和基于对象都是对一个抽象的对象拥有一系列的行为和状态,本质 ...
随机推荐
- win7旗舰版在安装vs2010后向sql2008添加SQL_Server_Management详解
原文地址:http://blog.csdn.net/bruce_zeng/article/details/8202746
- [terry笔记]RMAN综合学习之恢复
[terry笔记]RMAN综合学习之备份http://www.cnblogs.com/kkterry/p/3308405.html [terry笔记]RMAN综合学习之恢复 http://www.cn ...
- python-抓取图片
今天看到博客园一个文章,python抓取图片,也没看内容,心想自己也写一个抓取脚本试试看,一方面自己也在学习python,另一方面毕竟实际工作也经常会遇到这种需要临时写脚本的时候,突击锻炼还是好的嘛. ...
- jruby中的异常
先看看ruby中的异常知识: 异常处理raise 例子: raise raise "you lose" raise SyntaxError.new("invalid sy ...
- poj 3259 Wormholes
题目连接 http://poj.org/problem?id=3259 Wormholes Description While exploring his many farms, Farmer Joh ...
- WebStorm mac 下载地址及注册码
webStorm : UserName:William ===== LICENSE BEGIN ===== 45550-12042010 00001SzFN0n1bPII7FnAxnt0DDOPJA ...
- go语言值得学习的开源项目推荐
谷歌官方维护了一个基于go语言的开源项目列表: https://github.com/golang/go/wiki/Projects 其中有非常多的优秀项目值得学习,有几百行代码适合新手阅读的项目,也 ...
- 使用angular封装echarts
Echarts是一个开源的图表组件,图表比较丰富,工作中需要用到它来搭建一个数据展示系统.但是系统原有的框架是基于angular的,而echarts是基于原生js的,如果直接使用的话就丢失了angul ...
- 1 通过JNI混合使用Java和C++ -----> 操作字符串
JNI(Java Native Interface)是Java语言的一部分,可以访问非Java语言编写的程序,也可以用于在C++程序中执行Java代码. 步骤: 1> 编写带有native声明 ...
- 用vs2013编译lua源码方法
1.下载lua源码:lua-5.2.3.tar.gz,解压 2.用vs2013建立一个win32工程: 1)下载后解压到一个目录下,这里假设解压到 F:\lua-5.2.3 注意下载的版本,如果是 ...