ZhangKunDeBoKe

进击的编程菜鸟

 

面向对象设计思想

1.封装

封装(Encapsulation)是面向对象方法的重要原则,就是把对象的属性和操作(或服务)结合为一个独立的整体,并尽可能隐藏对象的内部实现细节。

封装是把过程和数据包围起来,对数据的访问只能通过已定义的接口。面向对象计算始于这个基本概念,即现实世界可以被描绘成一系列完全自治、封装的对象,这些对象通过一个受保护的接口访问其他对象。

封装是一种信息隐藏技术,在java中通过关键字private,protected和public实现封装。什么是封装?

封装把对象的所有组成部分组合在一起,封装定义程序如何引用对象的数据,封装实际上使用方法将类的数据隐藏起来,控制用户对类的修改和访问数据的程度。

适当的封装可以让程式码更容易理解和维护,也加强了程式码的安全性。

 

封装的作用

① 对象的数据封装特性彻底消除了传统结构方法中数据与操作分离所带来的种种问题,提高了程序的可复用性和可维护性,降低了程序员保持数据与操作内容的负担。
②对象的数据封装特性还可以把对象的私有数据和公共数据分离开,保护了私有数据,减少了可能的模块间干扰,达到降低程序复杂性、提高可控性的目的。
 
 

2.继承

继承就是子类继承父类的特征和行为,使得子类对象(实例)具有父类的实例域和方法,或子类从父类继承方法,使得子类具有父类相同的行为。
Java继承是面向对象的最显著的一个特征。继承是从已有的类中派生出新的类,新的类能吸收已有类的数据属性和行为,并能扩展新的能力。
类和类之间的继承关系可以用UML符号表示,其中父类又叫超类或基类,子类又叫派生类。父类是子类的一般化,子类是父类的特化(具体化)。
JAVA不支持多继承,单继承使JAVA的继承关系很简单,一个类只能有一个父类,易于管理程序,同时一个类可以实现多个接口,从而克服单继承的缺点。

优点

提高了代码的再利用性。

提高了代码的维护性。

让类与类有关,是多态的前提。

缺点

提高类的耦合性。这样一个类的变化会影响其他与此类相关的类别。

原则:低耦合,高内聚合。

耦合:类与类的关系。

内聚:自己完成某件事的能力。

打破了封装性。

 

执行顺序http://t.zoukankan.com/happyday56-p-4159650.html

总体逻辑,先静态初始化,然后普通初始化,然后构造函数,先父后子。特殊情况,子类的静态初始化会紧跟父类的静态初始化。

 

final密封

密封类可以⽤来限制扩展性,如果密封了某个类,则其他类不能从该类继承;如果密封了某个⽅法,则派⽣类不能重写该⽅法的实现。

如果所有的类都可以被继承,那么很容易导致继承的滥用。进而使类的层次结构体系变得十分复杂,这样使开发人员对类的理解和使用变得十分困难。为了避免滥用继承所以提出了final。

 

1. 密封类就是将⼀个类密闭起来,断其后代的⼀种⽅式。就是从修饰符的类派⽣出其他的类,所以密封类不能继承。密封类可以继承其
他类,充当基类。
2. 密封⽅法是重写的⽅法(重写⽗类⽅法、重写抽象⽅法)不是为了防⽌继承⽽是防⽌重写。
3. 为了防⽌重写某些类或⽅法导致代码混乱,此时,我们可以使⽤密封类和密封⽅法。
4. 密封类除了不能被继承外,与⾮密封类的⽤法⼤致相同,⽽密封⽅法则必须通过重写基类中的虚⽅法来实现。

 

 

 

3.多态

多态是同一个行为具有多个不同表现形式或形态的能力。

多态就是同一个接口,使用不同的实例而执行不同操作。

多态存在的三个必要条件

继承

重写

父类引用指向子类对象。(实例化父类赋值给子类 示例:    父类 p = new 子类();)

 

多态是面向对象的重要特性,简单点说:“一个接口,多种实现”,就是同一种事物表现出的多种形态。

减少冗余代码,屏蔽各个子类之间的差异,写出公用代码。 

 

 

4.抽象

抽象类是一种特殊的基类。有时候,基类并不与具体的事物联系,而是只是表达一种抽象的概念,用于为它的派生类提供一个公共的界面。

抽象类的概述

抽象类提供多个派生类共享基类的公共定义,它既可以提供抽象方法,也可以提供非抽象方法。抽象类不能实例化,必须通过继承由派生类实现其抽象方法,因此对抽象类不能使用new关键字,也不能被密封。如果派生类没有实现所有的抽象方法,则该派生类也必须声明为抽象类。另外,实现抽象由abstract来实现。

备注:

①抽象类不能直接实例化。

②抽象类中可以包含抽象成员,但非抽象类中不可以。

③抽象类不能被密封。

 

 

 

抽象和接口的区别

一、抽象类:

含有abstract修饰符的class即为抽象类,抽象类是特殊的类,只是不能被实例化,可以创建一个变量,其类型是一个抽象类,并让它指向具体子类的一个实例;除此以外,具有类的其他特性;重要的是抽象类可以包括抽象方法,这是普通类所不能的。抽象方法只能声明于抽象类中,且不包含任何实现,派生类必须覆盖它们。另外,抽象类可以派生自一个抽象类,可以覆盖基类的抽象方法也可以不覆盖。

二、接口:

接口是引用类型的,类似于类,和抽象类的相似之处有三点:
1、不能实例化;
2、包含未实现的方法声明;
3、派生类必须实现未实现的方法,抽象类是抽象方法,接口则是所有成员(不仅是方法包括其他成员);

 

抽象类和接口的使用:

1.如果预计要创建组件的多个版本,则创建抽象类。抽象类提供简单的方法来控制组件版本。
2.如果创建的功能将在大范围的全异对象间使用,则使用接口。如果要设计小而简练的功能块,则使用接口。
3.如果要设计大的功能单元,则使用抽象类.如果要在组件的所有实现间提供通用的已实现功能,则使用抽象类。
4.抽象类主要用于关系密切的对象;而接口适合为不相关的类提供通用功能。
5.好的接口定义应该是具有专一功能性的,而不是多功能的,否则造成接口污染。如果一个类只是实现了这个接口的中一个功能,而不得不去实现接口中的其他方法,就叫接口污染。

 

总结:抽象类是类,接口是应用类型。

一个基类可以继承多个接口,但是只能继承一个抽象类。

而且接口包含接口内的所有元素,而抽象类只包含抽象方法。

posted on 2022-06-10 16:43  杉桐  阅读(103)  评论(0编辑  收藏  举报

导航