初识c#---继承和继承关系中的构造函数
来源:互联网 发布:手机记牌器软件 2016 编辑:程序博客网 时间:2024/05/01 05:33
1.构造函数
构造函数的语法格式:
修饰符 + 类名(){
}
构造函数的作用:实例化对象,快速初始化对象
构造函数的特点:
1.如果类中没有构造函数,系统会为每一个类生成一个默认的构造函数
2.如果类中存在带有参数的构造函数,系统就不会为类生成默认的构造函数
此时如果调用 new Cat()(没有传参);时会报错.
解决办法有两个:1.为类添加默认的构造函数
2.new Cat(传参数);
3.构造函数是没有返回值的
如果类中没有构造函数,系统会为每一个类生成一个默认的构造函数
2.继承
继承的语法
A:B 即A类继承自B类
Enemy enemy=new Boss();//父类声明的对象,可以通过子类去构造,子类声明的对象不可以使用父类去构造
Boss boss=(Boss)enemy;//enemy虽然使用了父类声明,但是使用了子类构造 ,所以本质上是一个子类类型的,我们可以强制类型转换成子类类型
Enemy enemy=new Enemy();
Boss boss=(Boss)enemy;//一个对象是什么类型的 主要是看它是通过什么什么构造的,这里enemy是使用了父类的构造函数,所以只有父类中的字段和方法,不能被强制转换成子类
继承的特点:
1.子类会拥有父类所有的公开字段/属性/方法
2.父类不会拥有子类的字段/属性/方法
3.如果子类和父类出现相同的字段/属性/方法,以子类为准
4.子类可以出现在任何父类出现的地方,子类可以替换父类,
父类不能直接替换子类(需要强制转换 s=(Son)f;)
Father f = new Son();
编译时f的类型是Father,运行时f的类型是Son
5.如果子类出现和父类相同的方法名时,如果想隐藏父类方法,
需要在子类方法修饰符后加上new关键字(其实有没有new都行),防止后期程序过大时出现Bug(有待验证). 隐藏方法:
如果使用子类声明对象时,调用隐藏方法会调用子类的 Boss b=new Boss(); b.Move();
如果使用父类声明对象时,就会调用父类中的隐藏方法 Enemy e=new Boss(); e.Move();
6.base关键字代表父类对象
7.一个子类不可以拥有多个父类(父类除了object类)
8.父类可以拥有多个子类
继承中的构造函数特点:
1.如果两个类存在父子关系,那么在实例化子类的时候,首先会调用
父类的无参数构造函数,然后再调用子类的构造函数
2.实例化子类对象的时候,可以指定子类构造函数调用父类中存在的任意构造函数
使用关键字:base()
:base() ----指定子类构造函数调用父类的无参数构造函数
:base(a) ---指定子类构造函数调用父类带有一个参数的构造函数
这里需要注意的是:
我们在实例化子类对象的时候,一定要关注构造函数的特点;
/// 研究继承关系中构造函数的特点:
/// 1.首先会调用父类的构造函数(默认的构造函数也就是没有参数的构造函数),
/// 然后才会调用子类自身的构造函数
/// 2.如果父类重写了带有参数的构造函数后,在实例化子类对象的时候会出现编译
/// 错误.原因是重写了父类构造函数之后,系统不会在再父类自动生成默认的
/// 构造函数.而我们继承关系的构造函数特点是1
/// 3.子类的构造函数是可以指定,其在调用父类构造函数的时候去调用哪个父类构造函数
/// 写法,在构造函数后添加:base()即可.这里需要注意如果指定的父类构造函数带有两个参数
/// 那么base(a,b),以此类推.指定构造函数调用要遵循实参->形参的原则,就是类型相对应
this 与base关键字:
this可以访问当前类中定义的字段属性方法,有没有this都可以访问,有this可以让IDE-VS编译器给出提示,另外当方法的参数与字段重名的时候,使用this可以表明访问的是类中的字段,base可以调用父类中共有的方法和字段,有没有base都可以访问,但是有base的话,IDE编译器会给出提示,把所有可以调用的字段和方法罗列出来方便选择
阅读全文
1 0
- 初识c#---继承和继承关系中的构造函数
- 1.8 C# 继承和继承关系中的构造函数
- 继承关系中的构造函数调用
- 重写和继承关系中的构造方法
- Swift-便利构造函数和指定构造函数继承关系
- 构造函数的继承关系
- 继承关系中的构造方法
- 继承关系中的构造方法
- ruby中的构造函数和继承
- 继承中的构造和析构函数
- 构造函数和继承
- 继承和构造函数
- c#中继承关系中的子父类的构造函数 纠缠
- [java]继承中的构造函数
- JAVA继承中的构造函数
- 继承中的构造函数解析
- 【c++继承】继承关系中派生类对象构造函数和析构函数调用顺序
- 构造函数和一般成员函数在继承中的区别
- jmeter之ant配置批量执行用例发送邮件
- gabor特征 gabor滤波器
- 算法引论
- dos命令之 tracert 使用详解
- 抽象数据类型——线性表
- 初识c#---继承和继承关系中的构造函数
- 我得GoLang学习之路——hello world
- python 枚举类型实现
- 【数据库SQL】SQL2008必要安装
- 1、let和const -ES6学习笔记
- php设计模式--单例,工厂,观察者,策略模式
- Oracle常用函数使用汇总
- ActiveForm 的下拉菜單 dropDownList
- 一文看懂web服务器、应用服务器、web容器、反向代理服务器区别与联系