zoukankan      html  css  js  c++  java
  • OOP三大核心封装继承多态

    OOP支柱

    个核心:封装 继承 多态

    封装就是将实现细节隐藏起来,也起到了数据保护的作用。

    继承就是基于已有类来创建新类可以继承基类的核心功能。

    在继承中

    另外一种代码重用是:包含/委托,这种重用不是父子类的继承关系,而是一个类定义为另一个类的成员变量。

     

    一个简单的例子,汽车和收音机,汽车里面有一个收音机,不能说继承,不符合逻辑,只能说是一种对象包含了另一个对象。汽车对象中调用了收音机对象中的方法。

     

    多态就是同一请求,不同的响应操作。

     

    多态

    同一种方式处理相关对象的能力。

    相同的请求操作不同。

    两个原则:里氏替换原则:子类对象能够替换其基类对象被使用。

    开放封闭原则:对外扩展开放,对内修改封闭。

    定义一个抽象方法,派生类重写抽象方法具体实现。

     

    Aniaml an=new Cat();//开辟一个新空间指向派生类对象

     

    通过创建an 就可以指向多个派生类对象。

     

    an= new dog();

     

    an=new chicken();

     

    创建cat对象,基类指向子类

     

     

    Public公共的没有限制

    Private私有的 本类可用

    Protected 本类和子类使用

    set get方法就是最基础的封装。

    .NET语言提倡使用属性来强制封装状态数据。属性会总是映射到实际的访问方法和修改方法。创建了属性会在背后调用相应的get set来封装。

    封装具有安全性,封装可以方便以后的修改。Get可以表示具有只读属性,Set可以表示具有只写功能。

      

    属性内部表示

    如果已经写了封装set get方法又重新定义了set get方法那么编译会出错,基础类库会使用类型属性而不是传统的访问和修改方法。

     

    Public string company//封装没有括号()
    {
     Get{return companyName;}
     Set(companyName=value;)
    }//手动属性

     

    public int Num{get;set;}//自动属性

    自动属性必修同时支持读写功能。

    Const用来定义常量

    比如我定义一个π

    Public const double pai=3.14;

    Ps:关键字都是加字数据类型前面

    Readonly只读字段 和常量相似 不能在赋初始值后改变。

    但和常量也有不同的地方。

    赋给只读字段的值可以在运行时决定,因此在构造函数中赋值是合法的。例如:

    Class{

    Public readonly double pi;

    Public class(){

    Pi=3.14;

    }

    }

     

    继承与多态

    C#中定义冒号:操作类之间的关系。

    例如:MiVan继承Car

    Class MiVanCar

    {

    }

    MiVan可以调用父类的公共属性,继承保护了封装,无法访问私有成员。

    .NET不允许多重继承

    可以将类、结构或接口的定义拆分到两个或多个源文件中,在类声明前添加partial关键字即可。

    Sealed关键字

    防止发生继承

    创建子类对象访问基类功能,并扩展。

     

    Base关键字

    静态成员只能由类来访问,不能由对象来访问。

    Basethis都是访问类的实例

     

    一般基类的默认构造函数会被自动调用

     上述例子,显示调用合适的自定义基类构造函数。解决只读问题和低效性。增加了自定义的构造函数,就把默认的构造函数自动移除了,所以得重新定义默认构造函数。

     

    基类加Protected关键字

    好处:派生类就可以直接访问基类的信息。

    坏处:有可能绕过公共属性设置的业务规则。

    受保护的数据被认为是私有的。

     

    包含/委托编程

    Has-a关系

    简单的说,委托就是增加公共成员到包含类,以便使用被包含对象的功能。

     

    非嵌套类不能使用private关键字声明。

    Public class OuterClass

    {

    //公共嵌套类型可以被任何人使用

    Public class PublicInnerClass()

    //私有嵌套类型只可以被包含类的成员使用

    Private class PrivateInnerClass()

    }

     

    C#多态

    相同的请求做出不同的响应。

    如果基类希望定义由子类重写的方法,必须加上virtual关键字。

    如果子类希望改变虚方法的实现细节,必须使用override关键字。

    可以通过base关键来使用默认行为

    例如:

    Base.GiveBonus();

    使用了基类的默认行为。

     

    抽象类

    防止创建模糊的基类,使用abstract关键字。

    Abstract class Employee

    {

     

    }

    构建多态接口

    抽象方法只可以在抽象类中

    dynamic 类似于javascript中的Var 弱类型(与底层打交道会用的到)

     

     

  • 相关阅读:
    https-->http and http-->https bitransfer
    socat
    docker daemon configuration
    centos 7 update to python V3.43 to assure git clone as usual
    df and du
    SS iproute2,nslookup,dig
    jmxtrans
    web.xml之env-entry
    Java发送Http请求
    elasticsearch在CentOS环境下开机启动
  • 原文地址:https://www.cnblogs.com/cdjbolg/p/11755867.html
Copyright © 2011-2022 走看看