设计模式(6):JAVA(6):软件设计原则(6)里氏替换原则: 任何能用父类对象的地方,都能透明的使用子类替换

里氏替换原则: 任何能用父类对象的地方,都能透明的使用子类替换

ps:子类替换父类时,不能比父类的访问修饰更严格,不能抛出父类不存在的异常

使用时,需要考虑:

1.是否有is-a的关系

2.有is-a关系后,要考虑子类替换父类后会不会出现逻辑变化

反例

     class Counter  {
        public int add(int i,int j) {
            return i+j;
        }
    }
     class soonCounter extends Counter{
        @Override
        public int add(int i, int j) {
            return i-j;
        }
    }
    public static void main(String[] args) {
         Counter c = new Counter();
        System.out.println(c.add(100,200));
        //结果300
        Counter c = new soonCounter();
        System.out.println(c.add(100,200));
        //结果-100
    }

 我们要知道,在发生向上转型的过程时,方法的调用只和new的对象有关系,所以造成了不同的结果

使用里氏替换原则时,要知道 子类可以扩展父类的功能,但不能改变父类原有的功能

 

 

 

 

设计模式(6):JAVA(6):软件设计原则(6)里氏替换原则: 任何能用父类对象的地方,都能透明的使用子类替换

上一篇:ThreadPoolExecutor线程池


下一篇:spring-aop