多态

来源:互联网 发布:新开淘宝店铺怎么经营 编辑:程序博客网 时间:2024/05/20 17:08

多态

          里氏转换原则:

                                      a)子类可以赋值给父类(如果有一个地方需要一个父类作为参数,那么可以拿一个子类来代替)

                                       b)如果父类中装的是子类,那么这个父类可以强转成子类

                           eg:Person p=new Teacher();

                                         Teacher t=(Teacher)p;

                                  is:类型转换,如果转换成功,返回一个true,否则返回一个false

                                  as:类型转换,如果能够转换,那么返回这个类型的对象,否则返回一个null

       

        多态定义:让一个事物表现出多种形态(类型)

          实现多态的三种方法:1.虚方法        2.抽象类              3.接口


虚方法

            步骤:a)定义一个父类,这个父类的方法带有virtual修饰符,该修饰符说明了这个父类的子类可以重载这个方法

                           b)每个继承父类的virtual修饰方法的子类,都要在方法前加override。


抽象类(当父类的方法不知道怎么样去实现的时候,可以考虑将父类写成抽象类,把方法写成抽象方法)

                用abstract标记抽象类和抽象方法,继承父类的子类必须重写父类的方法

               具体调谁的方法 就要看父类中装的是哪个子类对象


抽象类的特点:

                1)抽象成员必须标志成abstract并且不能有任何的实现。

                2)抽象成员必须包含在抽象类中

                3)抽象类不能被实例化

               4)子类继承抽象类后,必须把父类中所有抽象成员都重写(除非子类也是抽象类,则可以不重写)

                5)抽象成员的访问修饰符不能使private

                6)抽象类中可以包含实例成员,并且抽象类的实例成员可以不被子类实现

                7)抽象类是有构造函数的,虽然不能被实例化

                8)如果父类的抽象方法有参数和返回值,则子类在实现这个方法的时候也必须传进对应的参数和返回值


接口:InterFace

           语法:interface 类名 {}      类名一般以I开头able结尾  代表一种能力



虚方法  抽象类  接口选择:

                1)如果父类中有默认的实现,并且父类需要被实例化,这时可以考虑把父类写成一个普通类,用虚方法实现多态

                 2)如果父类没有默认的实现,父类不需要被实例化,则可以将这个类定义成抽象类

                 3)接口代表一种能力 如果子类中有一种共有的能力的方法 这时候可以考虑把方法写到接口中



0 0
原创粉丝点击