git 切换远程分支

http://zhidao.baidu.com/link?url=cuqJsL9skJJn5c556zXfP1dgCAOUK37CDXkNIw\_sS0YKmvoROTI0HP7-PbKjgs6Lv4XrGleG2fjg5AaNgASlxgmt00c7rsC5gpPryKR\_D\_G

必然有广大人跟作者刚看到那项条件的时候同样,对这些原则的名字充满疑忌。其实原因正是那项条件最早是在一9八陆年,由斯坦福高校的壹人姓里的才女(BarbaraLiskov)提议来的。

 

定义1:假使对每叁个品种为 T一的目的 o一,都有品种为 T二的靶子o二,使得以 T一概念的有着程序 P 在全数的目的 o一 都代换到 o二 时,程序
P 的一举一动没有发生变化,那么类型 T二 是项目 T1 的子类型。

git
clone只好clone远程库的master分支,不能够clone全体支行,消除办法如下:

定义2:富有引用基类的地点必须能透明地选取其子类的对象。

  1. 找三个根本目录,假诺是git_work
  2. cd git_work
  3. git
    clone http://myrepo.xxx.com/project/.git ,这样在git_work目录下取得一个project子目录
  4. cd project
  5. git branch -a,列出具有支行名称如下:
    remotes/origin/dev
    remotes/origin/release
  6. git checkout
    -b dev origin/dev,作用是checkout远程的dev分支,在本地起名字为dev分支,并切换来本地的dev分支
  7. git checkout -b release origin/release,效能参见上一步解释
  8. git checkout dev,切换回dev分支,并伊始支付。

题材原因:有1功力P1,由类A实现。现须求将成效P一进行扩大,扩张后的功力为P,当中P由原有效劳P一与新职能P贰组成。新职能P由类A的子类B来成功,则子类B在成功新效能P二的还要,有希望会导致原有职能P1产生故障。

焚薮而田方案:当使用持续时,服从里氏替换原则。类B继承类A时,除添加新的方法成功新增作用P二外,尽量不要重写父类A的办法,也尽大概不要重载父类A的点子。

        
继承蕴含那样1层意思:父类中凡是已经落实好的方法(相对于肤浅方法而言),实际上是在设定一多重的正经和契约,纵然它不强制须要具有的子类必须信守这一个契约,但是一旦子类对那几个非抽象方法任意修改,就会对全体继承体系造成损坏。而里氏替换原则正是表明了那壹层含义。

       
继承作为面向对象三大特点之①,在给程序设计带来巨大便利的还要,也拉动了弊端。比如接纳持续会给程序带来侵入性,程序的可移植性下降,扩充了指标间的耦合性,要是叁个类被别的的类所继承,则当以此类要求修改时,必须怀念到具有的子类,并且父类修改后,全部涉及到子类的功能都有希望会生出故障。

       
举例表明继承的高风险,大家须要形成2个两数相减的成效,由类A来担负。

class A{  
    public int func1(int a, int b){  
        return a-b;  
    }  
}  

public class Client{  
    public static void main(String[] args){  
        A a = new A();  
        System.out.println("100-50="+a.func1(100, 50));  
        System.out.println("100-80="+a.func1(100, 80));  
    }  
} 

 运转结果:

100-50=50
100-80=20

       
后来,大家供给扩大一个新的效果:完毕两数相加,然后再与拾0求和,由类B来顶住。即类B供给完毕四个效益:

  • 两数相减。
  • 两数相加,然后再加100。

       
由于类A已经完成了第一个效用,所以类B继承类A后,只须要再形成首个职能就足以了,代码如下:

class B extends A{  
    public int func1(int a, int b){  
        return a+b;  
    }  

    public int func2(int a, int b){  
        return func1(a,b)+100;  
    }  
}  

public class Client{  
    public static void main(String[] args){  
        B b = new B();  
        System.out.println("100-50="+b.func1(100, 50));  
        System.out.println("100-80="+b.func1(100, 80));  
        System.out.println("100+20+100="+b.func2(100, 20));  
    }  
}  

类B完毕后,运维结果:

100-50=150
100-80=180
100+20+100=220

       
大家发现原本运转如常的相减功用发生了不当。原因正是类B在给艺术起名时无意中重写了父类的主意,造成全部运行相减作用的代码全体调用了类B重写后的法门,造成原本运营平常的效果出现了错误。在本例中,引用基类A完结的效应,换来子类B之后,爆发了丰盛。在其实编制程序中,大家平常会经过重写父类的方法来形成新的法力,那样写起来就算简易,可是整个继承系列的可复用性会相比较差,特别是运用多态相比较频仍时,程序运营出错的可能率相当的大。若是非要重写父类的法门,相比较通用的做法是:原来的父类和子类都一连叁个更易懂的基类,原有的接续关系去掉,选择注重、聚合,组合等事关代替。

       
里氏替换原则通俗的来讲正是:子类能够扩展父类的作用,但不能够更改父类原有的作用。它蕴涵以下4层意思:

  • 子类能够兑现父类的抽象方法,但无法遮盖父类的非抽象方法。
  • 子类中能够追加本身有意的措施。
  • 当子类的方式重载父类的方法时,方法的嵌入条件(即方法的形参)要比父类方法的输入参数更加宽松。
  • 当子类的章程完结父类的抽象方法时,方法的前置条件(即方法的再次来到值)要比父类更严格。

       

       
看上去很神乎其神,因为大家会发觉在大团结编制程序中日常会背离里氏替换原则,程序仍旧跑的美观的。所以大家都会时有发生那样的难题,要是自个儿非要不依据里氏替换原则会有怎样后果?

        后果就是:您写的代码出标题标可能率将会大大增添。

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图