• 面向对象的封装性和多态性


    面向对象之封装性:

    1、继承要符合is-a的关系。即"子类is a 父类"——子类是父类。如:卡车是汽车,卡车is a 汽车。

    2、父类中如果用Protected修饰符,表示只允许其子类访问,而不允许其他非子类访问:

        父类中如果用private修饰符,子类是不能访问的。

    3、除了构造方法不能被子类继承外,其他都可以直接被继承。可以用base关键字调用父类的构造函数:语法如下

         :base(参数变量名)

         使用base还可以调用父类的属性和方法。

         注意:子类构造函数中已经定义了这些参数,在base()中只需指定变量名即可,

                  这个变量名必须与父类中的构造函数中的一致

    4、继承的特征:

         A 继承的传递性

         B 继承的单根性 表示一个子类只能继承一个父类。

         C 密封类 它修饰的类是不能被继承的。用关键字sealed

    ---------------------------------------------------------------------------------------------------------------------------------------------------

    面向对象之多态性:

    多态是指两个或多个属于不同类的对象,对于同一个消息(方法调用)作出不同响应的方式。实现多态的方式:

    一、抽象类和抽象方法

        1、 抽象类的语法:

                             访问修饰符 abstract class 类名

        2、 父类中的方法:

                             访问修饰符 abstract 返回类型 方法();

    注意:含有抽象方法的类必然是抽象类。抽象类中的方法并不一定都是抽象方法。

             抽象类是不能被实例化的。只能通过它的子类来实现该类的方法,除非它的子类也是一个抽象类。

             抽象类不能是密封或者静态的,抽象类被子类继承并实现它的抽象方法。

        3、重写抽象方法:

                              访问修饰符 override 返回类型 方法()

         4、使用场合:

                           A 父类提供了一个功能或者规定,约束子类的行为。

     示例:

    abstract public class Person
        {
            abstract public void SayHi();
        }

    //子类
       public class Student:Person
        {
          public override void SayHi()
            
                 //代码省略
            }
         }

        public class Teacher:Person
        {
          public override void SayHi()
            
                 //代码省略
             }
         }

    里氏替换原则

         "is"操作符用于检查对象是否与给定的类型相同。如: if(obj is string){}

         "as"用于两个对象之间的类型转换。如:string as obj;

    注意:as运算符当转换失败时,运算符将产生null,而不是引发异常。

         "is"检查一个对象是否兼容于指定的类型,并返回一个Boolean值:true或者fasle。注意,is操作符永远不会抛出异常,请看以下示例:

    ClassA

    {

    .... 

    }

    Object o=new Object();

    Boolean b1=(o is Object); //b1为true. 

    Boolean b2=(o is ClassA) ; b2为false.

    如果对象引用是null,is操作符总是返回false,因为没有可检查的其类型的对象。

    二、虚方法:

                    访问修饰符 virtual 返回类型 方法()

                   {

                         //方法体

                   }

     1、每个对象Object都有一个Equals()方法,用于确定两个实例对象是否相等,它是一个虚方法,可以重写这个方法。

          public virtual bool Equals(Object obj)

          默认情况下,Equals()方法只支持引用相等,也就是相比较的两个对象是否引用同一个对象。

          重写Equals()虚方法如:

            public override bool Equals(object obj)
            {
                //将要比较的对象转换为当前类型
                Student target = obj as Student;

                //如果为空、类型不同
                if (target == null)
                    return false;

                if (target.name == this.name &&
                    target.gender == this.gender &&
                    target.age == this.age &&
                    target.hobby == this.hobby &&
                    target.popularity == this.popularity)
                {
                    return true;
                }
                return false;
            }

    2、虚方法和抽象方法的区别:

      A、修饰的关键字不同

      B、父类中方法体的区别

      C、重写的区别(抽象方法必须override)

      D、抽象方法只能在抽象类中,而虚方法除了密封类外都可以写

    3、方法重写的条件:

         A、方法签名必须一样

         B、访问修饰符允许被放大

         C、返回类型必须一样   

    总结:面向对象的三大特征:

            封装:保证对象自身数据的完整性、安全性

            继承:建立类之间的关系,实现代码复用、方便系统的扩展

            多态:相同的方法调用可实现不同的实现方式

    三、方法重载

          1、与重写方法的区别

               A、应用场合不同:如果父类中有abstract/virtual,才能被重写,重写方法要求类与类之间是继承关系。

                                        而重载没有过多的要求。

    四、方法隐藏:父类和子类的方法都存在。

    五、静态(satice)类/密封(sealed)类/抽象(abstract)类它们各自的特点

    注:本文转载于http://www.cnblogs.com/028fly/archive/2009/06/06/1497079.html

  • 相关阅读:
    Mysql索引类型
    Linux 查看进程
    Element is not clickable at point error in chrome
    org.apache.commons.lang.StringUtils 中 Join 函数
    接口测试之webservice介绍
    Java 中正确使用 hashCode 和 equals 方法
    HTTP协议基础
    使用Groovy处理SoapUI中Json response
    SoapUI中读取法文字符
    SoapUI中XML解析
  • 原文地址:https://www.cnblogs.com/GISQZC/p/5223417.html
Copyright © 2020-2023  润新知