我是靠谱客的博主 单薄纸鹤,最近开发中收集的这篇文章主要介绍课堂笔记:设计原则之李氏替换原则,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

定义:子类可以扩展父类功能,但不可改变父类的功能。
原则一、子类必须实现父类的抽象方法,但不得重写(覆盖)父类的非抽象方法。
原则二、子类可以增加自己特有的方法。
原则三、当子类覆盖或实现父类方法时,方法的前置条件(即方法的形参)要比父类方法的前置条件更宽松。
原则四、当子类覆盖或实现父类方法时,方法的后置条件(即方法的返回值)要比父类方法的后置条件更严格。

比如如下场景,子类覆盖了父类的非抽象方法,不满足李氏替换原则,子类再无机会调用父类的方法。

public class Father {
	public int func1(int a, int b) {
		return a + b;
	}
}
public class Son extends Father {
	public int func1(int a, int b) {
		return a - b;
	}
}

解决方法:将func1重命名为sub即可。

再看如下场景,父类方法的形参比子类的宽松,会导致父类侵入问题:

import java.util.HashMap;
import java.util.Map;

class Father {
	public void func1(Map map) {
		System.out.println("父类的func1");
	}
}
class Son extends Father {
	public void func1(HashMap map) {
		System.out.println("子类的func1");
	}
}
public class Test {
	public static void main(String[] args) {
		Map map = new HashMap();
		Son son = new Son();
		son.func1(map);
	}
}

注意这里我为了图方便,把3个类写到同一个文件里了。
这里调用son.func1看到输出是父类的,应该把子类的形参改为Map,父类形参改为HashMap,才能调用子类的方法。(不过这里我有一个疑惑,为什么非得用Map map = new HashMap())。

对于原则四的例子只要将形参改为返回值即可演示,这里不再赘述。

最后

以上就是单薄纸鹤为你收集整理的课堂笔记:设计原则之李氏替换原则的全部内容,希望文章能够帮你解决课堂笔记:设计原则之李氏替换原则所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(31)

评论列表共有 0 条评论

立即
投稿
返回
顶部