多态性(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

 1 /**
 2  * @Description: 书(父类)
 3  * @author: vioking
 4  * @date: 2017-7-12
 5  */
 6 public class Book {
 7
 8     private String title;//书名
 9     private String author;//作者
10     private String bookType;//类型
11
12     //默认构造方法
13     public Book() {
14     }
15
16     public Book(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 void read(){
26
27         System.out.println("公共父类的方法");
28     }
29
30     public String getTitle() {
31         return title;
32     }
33
34     public void setTitle(String title) {
35         this.title = title;
36     }
37
38     public String getAuthor() {
39         return author;
40     }
41
42     public void setAuthor(String author) {
43         this.author = author;
44     }
45
46     public String getBookType() {
47         return bookType;
48     }
49
50     public void setBookType(String bookType) {
51         this.bookType = bookType;
52     }
53 }

子类:MathBook.java

 1 /**
 2  * @Description: 数学书子类
 3  * @author: vioking
 4  */
 5 public class MathBook extends Book{
 6
 7
 8     private String formula;//数学公式
 9
10     //重写父类的方法
11     public void read(){
12
13         System.out.println("数学书子类"+"\n书名:"+getTitle()+"\n作者:"+getAuthor()+"\n类型:"+getBookType()+"\n公式:"+getFormula());
14     }
15
16     public String getFormula() {
17         return formula;
18     }
19
20     public void setFormula(String formula) {
21         this.formula = formula;
22     }
23 }

子类:PhilosophyBook.java

 1 /**
 2  * @Description: 哲学书子类
 3  * @return: ${return_type}
 4  * @author: vioking
 5  */
 6 public class PhilosophyBook extends Book {
 7
 8     private String idea;//观点
 9
10     public void read(){
11
12         System.out.println("哲学书子类"+"\n书名:"+getTitle()+"\n作者:"+getAuthor()+"\n类型:"+getBookType()+"\n公式:"+getIdea());
13     }
14
15     public String getIdea() {
16         return idea;
17     }
18
19     public void setIdea(String idea) {
20         this.idea = idea;
21     }
22 }

测试方法:BookMain.java

 1 /**
 2  * @Description: 主方法
 3  * @author: vioking
 4  */
 5 public class BookMain {
 6
 7     public static void main(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 = new PhilosophyBook();
16         philosophyBook.setTitle("马克思主义哲学");
17         philosophyBook.setAuthor("马克思");
18         philosophyBook.setBookType("哲学书");
19         philosophyBook.setIdea("社会大分工的结果使大多数人重复简单而单一的工作");
20         philosophyBook.read();
21     }
22 }

运行结果:

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

封装性:

  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

时间: 2024-10-01 20:30:14

多态性(polymorphism),封装性(encapsulation),内聚(cohesion)以及耦合(coupling)的基本概念的相关文章

JAVA- 面向对象的三大特征(封装性、继承性、多态性)

程序的发展经历了两个主要阶段:面向过程.面向对象.面向对象是当前软件开发的主流. 面向过程就是分析出解决所需要的步骤,然后用函数将这些步骤一步一步实现,使用的时候一个一个一次调用. 面向对象是把构成问题的事务分解成各个对象.建立对象的目的不是为了完成一个步骤而是为了描述某个事物在整个解决问题步骤中的行为. 面向对象是为了专注在程序中采用封装.继承.多态等设计方法.面向对象的设计是一种提供符号设计系统的面向对象的实现过程,它用非常接近实际领域术语的方法吧系统构造成"现实世界"的对象. 面

面向对象的封装性和多态性

面向对象之封装性: 1.继承要符合is-a的关系.即"子类is a 父类"——子类是父类.如:卡车是汽车,卡车is a 汽车. 2.父类中如果用Protected修饰符,表示只允许其子类访问,而不允许其他非子类访问: 父类中如果用private修饰符,子类是不能访问的. 3.除了构造方法不能被子类继承外,其他都可以直接被继承.可以用base关键字调用父类的构造函数:语法如下 :base(参数变量名) 使用base还可以调用父类的属性和方法. 注意:子类构造函数中已经定义了这些参数,在b

Java面向对象设计主要有三大特征:封装性、继承性和多态性

一  封装性   1.1  概念:它是将类的一些敏感信息隐藏在类的类部,不让外界直接访问到,但是可以通过getter/setter方法间接访问. 1.2  目的:我们可以并且有可能在方法中,添加自己的限制,保证数据的有效性:从某种程度上说,封装也提高了代码的健壮性.安全性. 1.3  实现步骤:所有的成员变量全部私有化,格式 :private   数据类型  变量名  ,提供访问成员变量的getter/setter方法. 二  继承性   2.1  概念:子类通过一种方式来接受父类所有的公有的,

OOP 三大特点:继承性,封装性,多态性

1.继承性:代码重用 2.封装性:  使相似数据和操作进行封装,保持代码安全 3.多态性:  PHP不支持多态

java面向对象基础 封装性

对于刚学习java的人来说可能不知道 封装性的好处,感觉麻烦,封装有很多好处.最主要的目的就是 保护内容.保证某些属性或者方法不被外部看见. 类的封装性即不能让外面的类随意修改一个类的成员变量: 在定义一个类的成员(包括变量和方法),使用private关键字说明这个成员的访问权限,只能被这个类的其他成员方法调用,而不能被其他的类中的方法所调用: 为实现封装性,常将类的成员变量声明为private,再通过public的方法来对这个变量进行访问.对一个变量的操作,一般都有 读取和赋值操作,我们一般定

转载 实现类的封装性

实现类的封装性 为了实现良好的封装性,我们通常将类的成员变量声明为private,再通过public的方法来对这个变量进行访问.对一个变量的操作,一般都有读取和赋值操作,我们分别定义两个方法来实现这两种操作,一个是getXxx()(Xxx表示要访问的成员变量的名字),用来读取这个成员变量操作,另外一个是setXxx()用来对这个成员变量赋值.一个类通常就是一个小的模块,我们应该让模块仅仅公开必须要让外界知道的内容,而隐藏其它一切内容.我们在进行程序的详细设计时,应尽量避免一个模块直接修改或操作另

Java10-java语法基础(九)——java的封装性

一.Java的三大特性:封装.多态.继承 封装:通过类封装对象的数据成员和成员方法,保证只有可信的类或者对象能够访问这些方法和数据成员,对不可信的类或者对象进行信息隐藏. 继承:继承是从已有的类中派生出新的类,新的类能吸收已有类的数据成员和方法,并能扩展新的能力. 多态:多态性是指不同的对象,收到同一消息可以产生不同的结果. 二.面向对象编程的封装性 封装的实现:通过private关键字实现 1.封装数据成员和成员方法 (1)封装数据成员:一般情况下,没有特殊说明,类的数据成员都是私有的 pri

python第四十三课——封装性

1.面向对象的三大特性:封装性.继承性.多态性 封装: 封装使用的领悟: 1).生活层面:食品.快递.计算机.明星... 2).计算机层面: ①.模块.类.函数... ②.属性数据的封装与隐藏 权限修饰符的概念: public(公共的,范围最大) protected(收保护的)default(默认,缺省) private(私有的,范围最小) python语言没有以上这些关键字: 对于python的属性私有化使用:__来实现 在设计完类,外界创建对象通过.的形式访问(设置)属性, 可能会出现跟现实

【PHP面向对象(OOP)编程入门教程】9.封装性(var与public,protected,private的关系)

封装性是面象对象编程中的三大特性之一,封装性就是把对象的属性和服务结合成一个独立的相同单位,并尽可能隐蔽对象的内部细节,包含两个含义: 1. 把对象的全部属性和全部服务结合在一起,形成一个不可分割的独立单位(即对象). 2. 信息隐蔽,即尽可能隐蔽对象的内部细节,对外形成一个边界[或者说形成一道屏障],只保留有限的对外接口使之与外部发生联系. 封装的原则在软件上的反映是:要求使对象以外的部分不能随意存取对象的内部数据(属性),从而有效的避免了外部错误对它的"交叉感染",使软件错误能够局