大家可以关注下我的微信公众号

黑马程序员——多态练习之基础知识点

HM程序员 admin 1156℃ 0评论

———————- Windows Phone 8手机开发.Net培训、期待与您交流! ———————-

1、 继承里面,构造方法的执行顺序
构造方法赋值(FileStream) 2、 里氏转换原则
-> 子类对象可以直接赋值给类对象(子类可以隐式转换为父类)
-> 指向子类的父类对象,可以强制转化为该子类对象 3、 C#是类型安全的语言
-> 什么类型的数据,只能赋值给什么类型的变量
-> 什么类型,只能访问该类型的成员(通过点)
4、 is用来判断对象是否可以进行转化
语法
变量(对象) is 类型
-> 如果对应的变量可以转化为右边的类型,那么整个表达式为true
-> 如果不能转化就是false
5、 (难)this与base
this
-> 区分类的成员
-> 子类中使用this描述父类成员的时候一样可行(继承)
-> 此时写base与this是等价的(方便开发是分清楚变量)
-> 调用本类构造方法(**)
-> 在很多情况下,构造方法都是为字段赋初值的
-> 由于实现的功能不同,那么赋值的时候,可能不一定完全相同

base
-> 区分类的成员
-> 调用父类构造方法(*)

(1)如何指定调用构造方法(根据参数重载)
(2)语法

6、 使用里氏转换原则可以统一调用,
每次使用各个成员的方法的时候,都需要判断,强转

能不能不强转,直接使用ps[i].SayHello()

在父类中提供一个与子类方法名完全相同的方法(不考虑重载)

-> 当子类与父类有相同方法的时候
-> new一个子类对象,看类型决定调用的方法是什么

看类型决定调用方法

用父类对象可以调用子类方法?

new则隐藏,over重写
隐藏看类型,重写只管新
7、 继承存在,并保证子类与父类有相同的方法
在父类方法前加上virtual
在子类方法前加一个override

隐藏基类方法,根据类型决定调用什么方法
重写基类方法,无论什么类型调用新的方法(子类重写的那个方法)

8、 多态
-> 一个调用,多种实现
-> 隐藏、重写

-> 写一个USB方法(父类)
-> 写三个子类(Light、Phone、UDisk)
-> Main方法中通过new对象,赋值给父类
-> 只要是调用USB方法,那么就会根据赋值的那个对象,调用对应的方法

9、 as运算符
子类 z; // f是一个父类的变量,或者其他变量
if(f is 子类)
{
z = (子类)f;
}
else
{
z = null;
}
===============
子类 z = f as 子类;

10、抽象方法
-> 不知道方法怎么实现
-> 方法不需要实现
public abstract 返回类型 方法名();

-> 抽象方法必须在抽象类中
-> 在类前面加上一个abstract
-> 抽象方法就是为了实现多态的,所以子类必须重写父类中的抽象方法
public override 父类提供的方法名()
{
// 正常方法
}
-> 如果子类也是抽象的,就可以不重写
11、抽象类(在一般类的基础之上,添加了抽象成员)
-> 带有abstract的类
-> 抽象类,是对一类事物或对象的抽象,它统一了一类对象
-> 抽象类中有哪些成员呢?
-> 抽象成员
-> 方法、属性(、索引、事件声明)
-> 非抽象成员(与正常类一样)

-> 怎么使用抽象类?
-> 就是为了实现多态的
-> 抽象类能否实例化?有没有构造函数?

-> new 一个人出来
12、产生随机数的方法
Random r = new Random();
int res = r.Next();
-> r.Next() 一个int范围的随机数
-> r.Next(num) 一个在0,num之间的随机数(num取不到)
-> r.Next(min, max) 一个在min与max之间的随机数(max取不到)

13、抽象属性
-> 抽象与自动属性很像,但是本质不同
-> 自动属性,后台会有一个字段生成,体统会自动的添加对应的方法体
-> 抽象属性,是因为没有方法体,所以get,set中什么都没有
-> 结果的不同
-> 自动属性,get,set共存
-> 抽象属性是可以有:只读、只写、可读可写之分的

 

 

 
———————- Windows Phone 8手机开发.Net培训、期待与您交流! ———————-

详细请查看:http://edu.csdn.net/heima/

转载请注明:程序人生 » 黑马程序员——多态练习之基础知识点

喜欢 (0)or分享 (0)