黑马程序员_学习日记36_531基础加强(抽象类、接口实现多态)

22 篇文章 0 订阅

1、 多态的作用

把不同的子类对象都当作父类来看,可以屏蔽不同子类对象之间的差异,写出通用的代码,做出通用的编程,以适应需求的不断变化。

 

2、 里氏替换原则

1)当需要一个父类类型对象的时候,可以给一个子类类型的对象;反之,不行。

2)把子类类型赋值给父类类型,发生了隐式类型转换;把父类类型变量赋值给子类类型,需要显式类型转换。前提是如果这个父类类型变量p中,指向的确实是一个子类对象,则可以显式类型转换,如果p指向的不是Chinese,则显式转换会报异常。

Person p = new Chinese ();

Chinese cn = (Chinese) p;

3)比较两种显式转换方法:

为了避免显式转换报异常,可以提前判断类型。例:

        if(p is Chinese)

        {

Chinese cn = (Chinese) p;

}

显式类型转换最好用as转换,转换失败不报异常,只返回null。例:

        Chinese cn = p asChinese;

4)类型转换时,验证当前类型是否为某个类型,调用其父类判断。其中GetType()通过反射验证类型。

 

3、 通过抽象方法实现多态

(1)      抽象成员不能有任何实现:抽象方法不能有任何方法体

(2)      抽象成员必须在抽象类中

(3)      抽象类不能实例化

(4)      父类中的抽象成员,子类继承后必须重写(除非子类也是抽象类)

(5)      抽象类可以包含实例成员

(6)      抽象类有构造函数

(7)      抽象成员不能是private

(8)      可以有抽象方法、抽象属性、抽象事件、抽象索引器

如果父类需要实例化,用虚方法;如果父类不需要实例化,用抽象方法。

 

4、 new隐藏、截断(不常用)

在子类中写了一个全新的方法SayHi,同时隐藏了从父类中继承下来的SayHi

 

5、 接口:(小钥匙表示)

(1)      接口中只能包含方法(方法、属性、索引器、事件归根到底都是方法)

(2)      接口中的方法也不能有任何实现(就像抽象方法一样,直接加一个分号)

(3)      接口中的成员不能有任何访问修饰符(哪怕是public),默认是public

(4)      接口不能被实例化

(5)      实现接口的类,必须实现接口所有的成员

为什么用接口?

1、 类不能多继承,所以在某些情况下,只能用接口来代替

2、 接口的主要目的就是为了实现多态

3、 当一个类同时继承了某个类,并且实现了某些接口,必须将继承的类写在前面

4、 当多个类型都具有某个或某几个功能,但它们不属于共同类型,就不能用抽象类。这时为了实现多态,把共有方法提到一个接口中,这多个类实现该接口

建议:不要在一个接口中写过多的方法,避免照成接口污染

 

6、 简单工厂模式:

private JiSuan GetJiSuanObj(string p)

{

       JiSuanjs = null;

       switch(p)

       {

       case “+”:

              js = new JiaFa();

              break;

       case “-”:

              js = new JianFa();

              break;

}

return js;

}

 

快捷键:

cwConsole.WriteLine()的快捷键

智能提示完成:shift+alt+F10

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值