java cohesion_多态性(polymorphism),封装性(encapsulation),内聚(cohesion)以及耦合(coupling)的基本概念...

Java的三大特性:多态、封装、继承。

Java程序设计尊崇的思想:高内聚、低耦合。

多态性:Java官方给出的定义:

The dictionary definition of polymorphism refers to a principle in biology in which an organism or species can have many different forms or stages. This principle can also be applied to object-oriented programming and languages like the Java language. Subclasses of a class can define their own unique behaviors and yet share some of the same functionality of the parent class.

它的大义是说:多态性的本义是指生物学中的一个定律,一个生物体或者物种可以有不同的形式或者阶段。这个定律同样适用于面向对象编程和像Java一样的语言,一个类的子类可以定义自己独特的行为并且共享一些父类中共同的功能。

我们再来理解一下它的定义,“一个类的子类可以定义自己独特的行为并且共享一些父类中共同的功能”,我们就可以联想到它的实现方法:继承和接口实现,单一继承,多重实现,这样我们就把三大特性联系起来了,我们联系生活中的一些实例巩固和实践我们的定义,比如书,书有很多种,但他有一些共同的特性,比如书名、作者、前言、目录等和公共方法,比如读,我们就可以放在父类中,子类通过继承直接使用,但是不同的书有不同的读法和它自己的一些独有的属性,比如数学书,独特的属性:数学公式,自然读数学书跟读哲学书的方法就不一样,我们来看一个例子。

公共父类:Book.java

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

1 /**

2 * @Description: 书(父类)3 *@author: vioking4 * @date: 2017-7-125 */

6 public classBook {7

8 private String title;//书名

9 private String author;//作者

10 private String bookType;//类型11

12 //默认构造方法

13 publicBook() {14 }15

16 publicBook(String title, String author, String bookType) {17 this.title =title;18 this.author =author;19 this.bookType=bookType;20 }21

22 /**

23 * 公共方法24 */

25 public voidread(){26

27 System.out.println("公共父类的方法");28 }29

30 publicString getTitle() {31 returntitle;32 }33

34 public voidsetTitle(String title) {35 this.title =title;36 }37

38 publicString getAuthor() {39 returnauthor;40 }41

42 public voidsetAuthor(String author) {43 this.author =author;44 }45

46 publicString getBookType() {47 returnbookType;48 }49

50 public voidsetBookType(String bookType) {51 this.bookType =bookType;52 }53 }

View Code

子类:MathBook.java

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

1 /**

2 * @Description: 数学书子类3 *@author: vioking4 */

5 public class MathBook extendsBook{6

7

8 private String formula;//数学公式9

10 //重写父类的方法

11 public voidread(){12

13 System.out.println("数学书子类"+"\n书名:"+getTitle()+"\n作者:"+getAuthor()+"\n类型:"+getBookType()+"\n公式:"+getFormula());14 }15

16 publicString getFormula() {17 returnformula;18 }19

20 public voidsetFormula(String formula) {21 this.formula =formula;22 }23 }

View Code

子类:PhilosophyBook.java

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

1 /**

2 * @Description: 哲学书子类3 *@return: ${return_type}4 *@author: vioking5 */

6 public class PhilosophyBook extendsBook {7

8 private String idea;//观点

9

10 public voidread(){11

12 System.out.println("哲学书子类"+"\n书名:"+getTitle()+"\n作者:"+getAuthor()+"\n类型:"+getBookType()+"\n公式:"+getIdea());13 }14

15 publicString getIdea() {16 returnidea;17 }18

19 public voidsetIdea(String idea) {20 this.idea =idea;21 }22 }

View Code

测试方法:BookMain.java

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

1 /**

2 * @Description: 主方法3 *@author: vioking4 */

5 public classBookMain {6

7 public static voidmain(String[] args) {8 MathBook mathBook = new MathBook();//封装的父类属性

9 mathBook.setTitle("离散数学结构(第6版)");//封装的父类属性

10 mathBook.setAuthor("科曼(Bernard Kolman)");//封装的父类属性

11 mathBook.setBookType("数学书");//封装的父类属性

12 mathBook.setFormula("((p→q)∧(q→r))→(p→r)");//独有的子类属性

13 mathBook.read();//覆写的父类方法

14

15 PhilosophyBook philosophyBook = newPhilosophyBook();16 philosophyBook.setTitle("马克思主义哲学");17 philosophyBook.setAuthor("马克思");18 philosophyBook.setBookType("哲学书");19 philosophyBook.setIdea("社会大分工的结果使大多数人重复简单而单一的工作");20 philosophyBook.read();21 }22 }

View Code

运行结果:

94d6ecadde455566bb8a298773785f9b.png

这就是通过继承实现多态的一种方法,通过实现接口实现多态的原理基本差不多,就不赘述了。

封装性:

Encapsulation is one of the four fundamental OOP concepts. The other three are inheritance, polymorphism, and abstraction.

Encapsulation in Java is a mechanism of wrapping the data (variables) and code acting on the data (methods) together as a single unit. In encapsulation, the variables of a class will be hidden from other classes, and can be accessed only through the methods of their current class. Therefore, it is also known as data hiding.

Java中的封装是将数据(变量)和作为数据(方法)的代码作为一个单元进行包装的机制。在封装中,类的变量将从其他类隐藏,只能通过其当前类的方法进行访问。因此,它也被称为数据隐藏。

上例中的book.java就实现了简单的封装,它的类变量是私有的private,但是提供了公共的public方法以便其它类访问。

高内聚、低耦合

模块与模块间应该尽可能的避免发生联系,假如某一模块因为某种原因需要改动,但是这一模块的改动需要改动整个项目,这样一来就会延长开发周期,甚至出现不必要的bug,得不偿失。

同样,一个模块间的功能尽可能的发生多的联系,这样就能减少冗余,过多逻辑的判断,从而提高项目的可维护性和高执行效率。

以上是我对多态、封装、内聚和耦合的一点理解,如果错误,还请斧正,谢谢。

参考资料:

【1】. http://docs.oracle.com/javase/tutorial/java/IandI/polymorphism.html

【2】.http://www.tutorialspoint.com/java/java_encapsulation.htm

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值