面向对象五大原则_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
转集合
參考书籍:
《设计模式之禅》
參考文章:
我是菜鸟,我在路上。
最新文章
- [BZOJ3874][AHOI2014] 宅男计划
- 大数据每日干货第四天(linux基础之一目录结构与常用命令)
- spring 自动扫描、注册的类是否可以定义构造函数
- Android调用系统自带的设置界面
- AppScan Source V8.8 中弃用的功能
- 【leetcode】Longest Consecutive Sequence
- delphi 连接MYSQL 的方法
- (转)log4j:WARN No appenders could be found for logger 解决方案
- JQuery实现回车代替Tab键(按回车跳到下一栏)
- 从源码角度深入理解LayoutInflater
- CONCATENATION 引发的性能问题
- mysql 中的数据类型
- JS 事件对象和事件冒泡
- tangible T4 Editor 2.2.3 plus modeling tools for VS 2012 扩展名
- CMD下用csc.exe编译.cs 代码
- [笔记]LR和SVM的相同和不同
- WPF 简易的跑马灯效果
- macbook air扩展显示器全屏滑动怎样不一起滑动?
- Django【部署】uwsgi+nginx
- python面向对象学习(二)基本语法
热门文章
- BNUOJ 3580 Oulipo
- pytorch中torch.unsqueeze()函数与np.expand_dims()
- [android 代码search地址]
- 02-JSON
- 刷题总结——road(ssoi)
- 服务器内部转发forward,action到action
- uva 10515 规律打表
- spring 容器bean
- Codeforces Round #288 (Div. 2) E. Arthur and Brackets [dp 贪心]
- 【nodejs原理&;源码赏析(3)】欣赏手术级的原型链加工艺术