java设计模式_里氏代换原则

一、什么是里氏代换原则

里氏代换原则(Liskov Substitution Principle):
一个软件实体如果使用的是一个父类的话,那
么一定适用于其子类,而且它察觉不出父类和子
类对象的区别。也就是说,在软件里面,把父类
替换成它的子类,程序的行为没有变化。

二、反过来的代换不成立

里氏代换原则(Liskov Substitution Principle):
一个软件实体如果使用的是一个子类的话,那 么它不能适用于其父类。

三、企鹅是鸟类吗??

这里写图片描述

四、正方形是一种长方形吗??

这里写图片描述

五、好骗的Java编译器

这里写图片描述

六、原来还有一个四边形的概念?

这里写图片描述

//示例1:
public class Person {

    public void display(){
        System.out.println("this is a Person");
    }
}

public class Man extends Person{

    @Override
    public void display() {
        System.out.println("this is man");
    }
}

public class MainClass {

    public static void main(String[] args) {
        Person person = new Person();
        display(person);

        Person man = new Man();
        display(man);
    }

    public static void display(Person person){
        person.display();
    }
}


//this is a Person
//this is man

//示例2:
public interface Bird {

    public void fly();

}
public class LaoYing implements Bird{

    @Override
    public void fly() {
        System.out.println("老鹰在飞");
    }



}
public class Maque implements Bird{

    @Override
    public void fly() {
        System.out.println("麻雀在飞");
    }



}

public class Qie implements Bird{

    @Override
    public void fly() {
        System.out.println("企鹅不能飞");
    }



}

public class MainClass {

    public static void main(String[] args) {
        fly(new LaoYing());

        fly(new Qie()); //企鹅不能飞,但是它属于鸟类 

    }

    public static void fly(Bird bird ){
        bird.fly();
    }
}



//
//老鹰在飞
//企鹅不能飞

//示例3:
public class Rectangle {

    private long width;
    private long height;


    public void setWidth(long width) {
        this.width = width;
    }

    public long getWidth() {
        return width;
    }

    public void setHeight(long height) {
        this.height = height;
    }

    public long getHeight() {
        return height;
    }


}

public class Square extends Rectangle {

    private long side;

    public void setSide(long side) {
        this.side = side;
    }

    public long getSide() {
        return side;
    }
//父类中的方法
    @Override
    public void setWidth(long width) {
//      super.setWidth(width);
        this.setSide(width);
    }

    @Override
    public long getWidth() {
//      return super.getWidth();
        return this.getSide();
    }

    @Override
    public void setHeight(long height) {
//      super.setHeight(height);
        this.setSide(height);
    }

    @Override
    public long getHeight() {
//      return super.getHeight();
        return this.getSide();
    }




}

public class MainClass {

    public static void main(String[] args) {
        Rectangle rectangle = new Rectangle();
        rectangle.setHeight(10);
        rectangle.setWidth(20);
        test(rectangle);


        Square square = new Square();
        square.setHeight(10);
        test(square);
    }

    public static void test(Rectangle rectangle){
        System.out.println(rectangle.getHeight());
        System.out.println(rectangle.getWidth());
    }


}

//10
//20
//10
//10





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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值