面向对象五大原则_1.单一职责原则&2.里氏替换原则
一个类。仅仅有一个引起它变化的原因。应该仅仅有一个职责。每个职责都是变化的一个轴线。假设一个类有一个以上的职责,这些职责就耦合在了一起。这会导致脆弱的设计。当一个职责发生变化时,可能会影响其他的职责。另外,多个职责耦合在一起,会影响复用性。
比如:要实现逻辑和界面的分离。
也就是说职责P1和P2被耦合在了一起。
比如Iphone接口,打电话分为四个过程,拨号。通话,回拨。挂机。
改动后:
1.子类继承父类的成员变量
当子类继承了某个类之后,便能够使用父类中的成员变量。可是并非全然继承父类的全部成员变量。详细的原则例如以下:
1)可以继承父类的public和protected成员变量;不可以继承父类的private成员变量;
2)对于父类的包訪问权限成员变量,假设子类和父类在同一个包下。则子类可以继承;否则。子类不可以继承。
3)对于子类能够继承的父类成员变量,假设在子类中出现了同名称的成员变量,则会发生隐藏现象,即子类的成员变量会屏蔽掉父类的同名成员变量。假设要在子类中訪问父类中同名成员变量,须要使用superkeyword来进行引用。
2.子类继承父类的方法
相同地,子类也并非全然继承父类的全部方法。
1)可以继承父类的public和protected成员方法。不可以继承父类的private成员方法;
2)对于父类的包訪问权限成员方法,假设子类和父类在同一个包下,则子类可以继承。否则,子类不可以继承。
3)对于子类能够继承的父类成员方法。假设在子类中出现了同名称的成员方法,则称为覆盖。即子类的成员方法会覆盖掉父类的同名成员方法。
假设要在子类中訪问父类中同名成员方法,须要使用superkeyword来进行引用。
注意:隐藏和覆盖是不同的。隐藏是针对成员变量和静态方法的,而覆盖是针对普通方法的。(后面会讲到)
3.构造器
子类是不可以继承父类的构造器,可是要注意的是。假设父类的构造器都是带有參数的,则必须在子类的构造器中显示地通过superkeyword调用父类的构造器并配以适当的參数列表。假设父类有无參构造器,则在子类的构造器中用superkeyword调用父类构造器不是必须的,假设没有使用superkeyword,系统会自己主动调用父类的无參构造器。
子类必须全然实现父类的方法就是为了代码复用。
每一个方法必须有所用处,父类中的參数范围尽管没有子类的大。子类的重载是为了扩展。弥补了父类的不足。一般来说,是不会去重载的。
public class Father {
public Collection doSomething(Map map){
System.out.println("父类:Map 转集合");
return map.values();
}
}
Son 类
public class Son extends Father {
public Collection doSomething(HashMap map) {
System.out.println("子类:Hashmap 转集合");
return map.values();
}
}
測试类
public static void main(String[] args) {
Son f=new Son(); //俩个方法 一个
HashMap h=new HashMap();
f.doSomething(h); //子类
}
结果:
子类:Hashmap
转集合
參考书籍:
《设计模式之禅》
參考文章:
我是菜鸟,我在路上。
面向对象五大原则_1.单一职责原则&2.里氏替换原则的更多相关文章
- C# 实例解释面向对象编程中的里氏替换原则
在面向对象编程中,SOLID 是五个设计原则的首字母缩写,旨在使软件设计更易于理解.灵活和可维护.这些原则是由美国软件工程师和讲师罗伯特·C·马丁(Robert Cecil Martin)提出的许多原 ...
- S.O.L.I.D五大原则之单一职责SRP
转自 : 汤姆大叔的blog Bob大叔提出并发扬了S.O.L.I.D五大原则,用来更好地进行面向对象编程,五大原则分别是: The Single Responsibility Principle(单 ...
- 深入理解JavaScript系列(6):S.O.L.I.D五大原则之单一职责SRP
前言 Bob大叔提出并发扬了S.O.L.I.D五大原则,用来更好地进行面向对象编程,五大原则分别是: The Single Responsibility Principle(单一职责SRP) The ...
- 开放-封闭原则(OCP)开-闭原则 和 依赖倒转原则,单一职责原则
单一职责原则 1.单一职责原则(SRP),就一个类而言,应该仅有一个引起它变化的原因 2.如果一个类承担的职责过多,就等于把这些职责耦合在一起,一个职责的变化可能会消弱或抑制这个类完成其他职责的能力. ...
- java6大原则之单一职责原则,里式替换原则
单一职责原则:一个接口,一个类,一个方法,最好只做一类事,当然,在真实的项目中,一系列因素下,很难做到单一职责原则,但是针对接口是可以做到的,方法和类要尽量做到 里式替换原则:父类出现的地方,换成子类 ...
- 设计原则:单一职责(SRP)原则
1 什么是单一职责(SRP)原则 单一职责原则的英文是 Single Responsibility Principle,缩写为 SRP.翻译过来就是:一个类或者模块只负责完成一个职责(或者功能). 所 ...
- 深入理解JavaScript系列(8):S.O.L.I.D五大原则之里氏替换原则LSP
前言 本章我们要讲解的是S.O.L.I.D五大原则JavaScript语言实现的第3篇,里氏替换原则LSP(The Liskov Substitution Principle ). 英文原文:http ...
- 第2章 面向对象的设计原则(SOLID):2_里氏替换原则(LSP)
2. 里氏替换原则(Liskov Substitution Principle,LSP) 2.1 定义 (1)所有使用基类的地方必须能透明地使用子类替换,而程序的行为没有任何变化(不会产生运行结果错误 ...
- 【面向对象设计原则】之里氏替换原则(LSP)
里氏代换原则由2008年图灵奖得主.美国第一位计算机科学女博士Barbara Liskov教授和卡内基·梅隆大学Jeannette Wing 教授于1994年提出,所以使用的是这位女博士的性命名的一个 ...
随机推荐
- Python 编程要求
1.添加前缀 #!/usr/bin/env python # -*- coding:utf-8 -*- 2.py文件.函数都要写好注释 3.主函数要加上判断 if __name__ == " ...
- ZingChart 图表插件
ZingChart提供了一个丰富的API,用于通过重新绘制绘图(重新加载) ,加载新数据(setseriesdata),修改现有图表(modifyplot), 放大数据范围(zoomto),切换各种交 ...
- HDU 2435 There is a war
There is a war Time Limit: 1000ms Memory Limit: 32768KB This problem will be judged on HDU. Original ...
- Android ListView子item高度定长固定值无效问题
在项目开发中遇到一个实际问题:ListView中,打算给每个子item设定一个具体的高度值如128dp,256dp,在子item中把根布局的高度值写死写成定长,但是不管怎么样,高度一直都没变化.开始以 ...
- BZOJ 2190 [SDOI2008]仪仗队 ——Dirichlet积
[题目分析] 考虑斜率为0和斜率不存在的两条线上只能看到3人. 其余的人能被看见,当且仅当gcd(x,y)=1 ,然后拿卷积算一算 发现就是欧拉函数的前缀和的二倍. 注意2的情况要特判. [代码] # ...
- [luoguP1131] [ZJOI2007]时态同步(贪心)
传送门 显然是一棵树. 又显然一段一段地增加比较优. 我们可以dfs,并且尽量把每一个节点所有子树中所有节点的时间增加到一样. #include <vector> #include < ...
- tarkjan求无向图割点模板
#include<bits/stdc++.h> using namespace std; typedef long long ll; int n,m; ; ; struct node { ...
- 【单调队列优化dp】uestc 594 我要长高
http://acm.uestc.edu.cn/#/problem/show/594 [AC] #include<bits/stdc++.h> using namespace std; t ...
- vector 类中的 push_back( ) 函数
函数名 push_back,算法语言里面的一个函数名,如: 1) c++中的vector头文件里面就有这个push_back函数: 2) 在vector类中作用为在vector尾部加入一个数据 ...
- 送外卖(codevs 2800)
题目描述 Description 有一个送外卖的,他手上有n份订单,他要把n份东西,分别送达n个不同的客户的手上.n个不同的客户分别在1~n个编号的城市中.送外卖的从0号城市出发,然后n个城市都要走一 ...