面向对象三大基本特性,五大基本原则
面向对象的三大基本特征,五大基本原则
面向对象的三大基本特征,五大基本原则
网上的讲解很多,但大都类似,这里进行转载整理。三大基本特征是理解五大基本原则的前提。
一、三大基本特征:封装、继承、多态
1、封装
封装就是隐藏对象的属性和实现细节,仅对外公开接口,控制在程序中属性的读和修改的访问级别,将抽象得到的数据和行为(或功能)相结合,形成一个有机的整体,也就是将数据与操作数据的源代码进行有机的结合,形成“类”,其中数据和函数都是类的成员。
封装的目的是增强安全性和简化编程,使用者不必了解具体的实现细节,而只是要通过外部接口,以特定的访问权限来使用类的成员。
面相对象的不就是使用程序处理事情时以对象为中心去分析吗,与面向过程不同,面向过程关心处理的逻辑、流程等问题,而不关心事件主体。而面向对象即面向主体,所以我们在解决问题时应该先进行对象的封装(对象是封装类的实例,比如张三是人,人是一个封装类,张三只是对象中的一个实例、一个对象)。比如我们日常生活中的小兔子、小绵羊都可以封装为一个类。
比如兔子的属性有两只耳朵、四只腿、一双眼睛、三瓣嘴等;行为(功能)有跑、跳、吃素等。
2、继承
继承是面向对象的基本特征之一,继承机制允许创建分等级层次的类。继承就是子类继承父类的特征和行为,使得子类对象(实例)具有父类的实例域和方法,或子类从父类继承方法,使得子类具有父类相同的行为。类似下面这个图:
我们在上面已经封装了兔子这个类,其他动物也一样可以进行封装。在封装过程中我们发现兔子、绵羊这两个类具有相似的功能或特性如吃草,所以我们可以抽取共有特征和方法形成高一层的类,如这里的食草动物、食肉动物。继承之间是子父类的关系。继承机制可以很好的描述一个类的生态,也提高了代码复用率,在Java中的Object类是所有类的超类,常称作上帝类。
三大基本特性
面向对象是当前计算机界的重点,是当今软件开发方法的主流。java面向对象具有三大基本特性:封装、继承、多态。要想掌握面向对象思想,就得深入了解这三大基本特性。
一、封装性
所谓封装,就是将对象具有的成员变量和成员函数包装和隐藏起来,让外界无法直接使用,被封装的成员只能通过某些特定的方式才能访问。
实现封装有两个步骤:
1、将不能暴露的成员隐藏起来,我们就不能让其在类的外部被直接访问或赋值。实现方法是将该成员定义为私有的,在成员定义前加上private访问权限修饰符。
2、用公共方法来暴露对该隐藏成员的访问,可以给成员加上public修饰符,将该成员定义为公共的。
具体请看如下实例:
class Customer{
String name;
String sex;
private int age;
public void setAge(){
if(age<0||age>100){
System.out.println("age无法赋值")
return;
}
this.age = age;
}
public int getAge(){
return this.age;
}
}
public class Test{
public void main(String[] args){
Customer zhangsan = new Customer();
zhangsan.setAge(25); //使用特殊方法访问Customer类的age成员
System.out.println("zhangsan.age="+zhangsan.getAge());
java面向对象总结(一)
java⾯向对象总结(⼀)
1. 对象的概念及⾯向对象的三个基本特征
⾯向对象的三⼤核⼼特性
⾯向对象开发模式更有利于⼈们开拓思维,在具体的开发过程中便于程序的划分,⽅便程序员分⼯合作,提⾼开发效率。⾯向对象程序设计有以下优点。
1. 可重⽤性:它是⾯向对象软件开发的核⼼思路,提⾼了开发效率。⾯向对象程序设计的抽象、继承、封装和多态四⼤特点都围绕这个
核⼼。
2. 可扩展性:它使⾯向对象设计脱离了基于模块的设计,便于软件的修改。
3. 可管理性:能够将功能与数据结合,⽅便管理。
该开发模式之所以使程序设计更加完善和强⼤,主要是因为⾯向对象具有继承、封装和多态 3 个核⼼特性。
继承性
如同⽣活中的⼦⼥继承⽗母拥有的所有财产,程序中的继承性是指⼦类拥有⽗类数据结构的⽅法和机制,这是类之间的⼀种关系;继承只能是单继承。
例如定义⼀个语⽂⽼师类和数学⽼师类,如果不采⽤继承⽅式,那么两个类中需要定义的属性和⽅法.
语⽂⽼师类和数学⽼师类中的许多属性和⽅法相同,这些相同的属性和⽅法可以提取出来放在⼀个⽗类中,这个⽗类⽤于被语⽂⽼师类和数学⽼师类继承。当然⽗类还可以继承别的类,
学校主要⼈员是⼀个⼤的类别,⽼师和学⽣是学校主要⼈员的两个⼦类,⽽⽼师⼜可以分为语⽂⽼师和数学⽼师两个⼦类,学⽣也可以分为班长和组长两个⼦类。
使⽤这种层次形的分类⽅式,是为了将多个类的通⽤属性和⽅法提取出来,放在它们的⽗类中,然后只需要在⼦类中各⾃定义⾃⼰独有的属性和⽅法,并以继承的形式在⽗类中获取它们的通⽤属性和⽅法即可。
封装性
封装是将代码及其处理的数据绑定在⼀起的⼀种编程机制,该机制保证了程序和数据都不受外部⼲扰且不被误⽤。封装的⽬的在于保护信息,使⽤它的主要优点如下。
简述对面向对象的三大特征的理解
简述对面向对象的三大特征的理解
面向对象有三大特点:封装、继承、多态。
1、继承性:
继承是一种联结类的层次模型,并且允许和鼓励类的重用,它提供了一种明确表述共性的方法。
对象的一个新类可以从现有的类中派生,这个过程称为类继承。新类继承了原始类的特性,新类称为原始类的派生类(子类),而原始类称为新类的基类(父类)。
派生类可以从它的基类那里继承方法和实例变量,并且类可以修改或增加新的方法使之更适合特殊的需要。
2、封装性:
封装是把过程和数据包围起来,对数据的访问只能通过已定义的界面。
面向对象计算始于这个基本概念,即现实世界可以被描绘成一系列完全自治、封装的对象,这些对象通过一个受保护的接口访问其他对象。
3、多态性:
多态性是指允许不同类的对象对同一消息作出响应。
多态性包括参数化多态性和包含多态性。多态性语言具有灵活、抽象、行为共享、代码共享的优势,很好的解决了应用程序函数同名问题。
面向对象的三大特性(封装-继承-多态)
一丶封装
1 权限修饰符
可以用来修饰成员变量和成员方法,对于类的权限修饰只可以用public和缺省default。
被public修饰的类可以在任意地方被访问;default类只可以被同一个包内部的类访问。
权限由大到小:public protected default(不写) private
被private修饰的成员只能在本类中访问,外界不能访问
2 set()/get()方法
(1)this关键字
a.可以用来调用变量,方法,构造方法;
b.this.xx 理解为调用当前类的xx。
(2)成员变量和局部变量
1)在类中的位置不同
a:成员变量:在类中,方法外
b:局部变量:在方法声明上(形式参数),或者是在方法定义中
2)在内存中的位置不同
a:成员变量:在堆内存
b:局部变量:在栈内存
3)生命周期不同
a:成员变量:随着对象的创建而存在,随着对象的消失而消失
b:局部变量:随着方法调用而存在,随着方法的调用结束而消失
4)初始化值不同
a:成员变量:有默认值
b:局部变量:必须初始化值,否则报错!(在使用它之前,没有初始化) (3)set()/get()方法
当成员变量被private修饰时,不在本类中无法直接访问,便需要set()/get()方法来解决这个问题
3 封装性
封装:是面向对象的第一大特性,所谓封装,就是值对外部不可见(一般而言被private修饰),外部只能通过对象提供的接口(如set()/get()方法)来访问。
封装的好处:a.良好的封装能够减少耦合;
b.类内部的结构可以自己修改,对外部影响不大;
c.可以对成员进行更精准的控制(防止出现与事实不符的情况);
面向对象的三大特性
面向对象的三大特性
收藏
面向对象的三个基本特征是:封装、继承、多态。
封装
封装最好理解了。封装是面向对象的特征之一,是对象和类概念的主要特性。
封装,也就是把客观事物封装成抽象的类,并且类可以把自己的数据和方法只让可信的类或者对象操作,对不可信的进行信息隐藏。
在Java中类中成员的属性有:public,protected,,private,这四个属性的访问权限依次降低。
继承
面向对象编程(OOP) 语言的一个主要功能就是“继承”。继承是指这样一种能力:它可以使用现有类的所有功能,并在无需重新编写原来的类的情况下对这些功能进行扩展。
通过继承创建的新类称为“子类”或“派生类”。
被继承的类称为“基类”、“父类”或“超类”。
继承的过程,就是从一般到特殊的过程。
要实现继承,可以通过“继承”(Inheritance)和“组合”(Composition)来实现。
在某些OOP 语言中,一个子类可以继承多个基类。但是一般情况下,一个子类只能有一个基类,要实现多重继承,可以通过多级继承来实现。
继承概念的实现方式有三类:实现继承、接口继承和可视继承。
Ø实现继承是指使用基类的属性和方法而无需额外编码的能力;
Ø接口继承是指仅使用属性和方法的名称、但是子类必须提供实现的能力;
Ø可视继承是指子窗体(类)使用基窗体(类)的外观和实现代码的能力。
在考虑使用继承时,有一点需要注意,那就是两个类之间的关系应该是“属于”关系。例如,Employee 是一个人,Manager 也是一个人,因此这两个类都可以继承Person 类。但是Leg 类却不能继承Person 类,因为腿并不是一个人。
面向对象的三大特征
⾯向对象的三⼤特征
⾯向对象有三个特征:1.封装,2.继承,3.多态。
封装
⼀个不可分割的独⽴实体;
隐藏内部细节;
保留对外接⼝。
封装的好处:
1. 保证数据的安全性;
2. 提供清晰的对外接⼝;
3. 类内部实现可任意修改,不影响其他类。
继承
继承可以使⼦类具有⽗类的属性和⽅法,或者重新定义、追加属性和⽅法等。
对象的继承代表了⼀种‘is-a’的关系,如果两个对象A和B,可以描述为‘B是A’,则表明B可以继承A;例如⼈是动物,猫是动物,狗是动物等等......
实际上,继承者还可以理解为是对被继承者的特殊化,因为它除了具备被继承者的特性外,还具备⾃⼰独有的个性。例如猫块可以爬树,⽽并不是所有动物都会爬树。
这也就说明量对象之间是不能颠倒顺序的。
继承定义了类如何相互联系,共享特性,继承的⼯作⽅式是,定义⽗类和⼦类,或叫做基类和派⽣类,其中⼦类继承⽗类的所有特性,⼦类不仅继承了⽗类的所有特性,还可以定义新的特性。
继承提⾼了代码复⽤性
多态
同⼀操作作⽤于不同的对象,可以有不同的解释,产⽣不同的执⾏结果,这就是多态性
简单来说就是⼀类事物有多种形态,例如动物有多态:猫、狗、⼈...
多态的特点:
1. 多态前提是必须有继承;
2. ⽗类引⽤变量指向⼦类;
3. ⽗类引⽤变量调⽤⽅法时,会调⽤⼦类重写后的⽅法。
[论文]面向对象的三个基本特征和概念
面向对象的三个基本特征(讲解)
面向对象的三个基本特征是:封装、继承、多态。
封装
封装最好理解了。封装是面向对象的特征之一,是对象和类概念的主要特性。
封装,也就是把客观事物封装成抽象的类,并且类可以把自己的数据和方法只让可信的类或者对象操作,对不可信的进行信息隐藏。
继承
面向对象编程 (OOP) 语言的一个主要功能就是“继承”。继承是指这样一种能力:它可以使用现有类的所有功能,并在无需重新编写原来的类的情况下对这些功能进行扩展。
通过继承创建的新类称为“子类”或“派生类”。
被继承的类称为“基类”、“父类”或“超类”。
继承的过程,就是从一般到特殊的过程。
要实现继承,可以通过“继承”(Inheritance)和“组合”(Composition)来实现。
在某些 OOP 语言中,一个子类可以继承多个基类。但是一般情况下,一个子类只能有一个基类,要实现多重继承,可以通过多级继承来实现。
继承概念的实现方式有三类:实现继承、接口继承和可视继承。
实现继承是指使用基类的属性和方法而无需额外编码的能力;
接口继承是指仅使用属性和方法的名称、但是子类必须提供实现的能力;
可视继承是指子窗体(类)使用基窗体(类)的外观和实现代码的能力。
在考虑使用继承时,有一点需要注意,那就是两个类之间的关系应该是“属于”关系。例如,Employee 是一个人,Manager 也是一个人,因此这两个类都可以继承 Person 类。但是 Leg 类却不能继承 Person 类,因为腿并不是一个人。
抽象类仅定义将由子类创建的一般属性和方法,创建抽象类时,请使用关键字 Interface 而不是 Class。
net的基本概念
一、面向对象概念
1.什么是面向对象?
内容看出一个对象。
2.面向对象的三大基本特性
封装、继承、多态
3.命名空间
Namespace
二、类和对象
1.概念
类:相似的一组对象,抽象出其共性,这个共性的集合称之为类。
对象:人们要进行研究的任何事物(任何实体)现实世界存在的客观实体。
2.类型:值类型和引用类型
4种引用类型:类类型、数组类型、接口类型和、委托类型两种类型之间的转换方法:装箱和拆箱
3类成员:
字段、属性、方法
4.类成员定义,访问修饰符
private : 私有成员, 在类的内部才可以访问。
protected : 保护成员,该类内部和继承类中可以访问。public : 公共成员,完全公开,没有访问限制。
internal: 在同一命名空间内可以访问。
protected internal:唯一的一种组合限制修饰符,它只可以被本组合体内所有的类和这些类的继承子类所存取。
5.对象的创建
new关键字
6.区分类和对象
类定义一组概念的模型,对象时真是的实体。
由对象归纳为类,是归纳对象共性的过程。
在类的基础上,将状态和行为实例化为对象的过程称为实例化
7.类和结构区别
(1) 结构是值类型:值类型在堆栈上分配地址;类是引用类型:引用类型在堆上分配地址
(2)继承性:结构不能从另外一个结构或者类继承,本身也不能被继承;类完全可扩展的,除非显式声明sealed,否则类可以继承其他类和接口,自身也能被继承。
8.构造函数
方法重载:形式参数类型或个数必须不同
系统提供一个无参构造函数
要自定义构造函数必须先写无参构造函数
构造函数可被继承
Java面向对象的三大特性
Java面向对象的三大特性
Java面向对象的三大特性
Java面向对象的三大特性分别为:封装、继承、多态,下面我们一起来详细了解一下!
1.封装:
说得通俗一点,就是把细节隐藏起来,把该公开的公开,把该私有的私有。
那如何封装一个类?
类中含属性和方法,属性可有可无,并且应该设置为private.
方法可有可无,对外的方法的应该公开,对内的方法应该私有.
一个类的方法,大致有:
构造方法 -> 可以生成
存/取属性值的方法,也就是 getter/setter 属性方法. -> 可以生成
业务方法,实现此类对象的真正业务功能,是程序员真正需要花心思考虑的。
针对类中的方法,有以下两种封装策略:
1).把存/取属性方法、构造方法、业务方法全部封装到同个类中。
2).把业务方法单独独立出来,形成一个业务类,这个类用来操作与它所相关的实体对象。它一般由接口与实现类组成.
实体(Entity)对象,就是指含业务属性和属性存/取方法的对象.
如:封装策略一:
public class Account {
private long id;
private String name;
private double balance;
private String pwd;
....
// getter/setter方法
// 构造方法
....
// 业务方法
public void withdraw(double money) {
if(balance < money) {
System.out.println("余额不足");
return ;
Java面向对象的三大特征
4、继承的限制和初始化顺序
问:子类可以继承父类的所有资源吗? 不能被继承的父类成员: private成员 子类与父类不在同包,使用默认访问权限的成员 构造方法
问:多重继承关系的初始化顺序是怎样的?
5.方法的重写
在子类中可以根据需要对父类中继承来的方法进行重写;
}
控制台打印结果:我会说英语 son.say首先会去父类找say方法,如果子类没有重写say方法,就会输出 “我会说话” ;但是子类里面也有say方法,就会把父类的say方法重 写,输出子类中say方法的内容
三、多态
1、多态的概念
生活中的多态:
不同类型的打印机打印效果不同
黑白打印机 黑白纸张
}
二、继承
1、继承的概念和特点
概念:
继承是Java面向对象编程技术的一块基石,因为它允许创建分等级层次的类。
继承就是子类继承父类的特征和行为,使得子类对象(实例)具有父类的实例域和方法,或类从父 类继承方法,使得子类具有父类相同 的行为。
特点:
继承鼓励类的重用 继承可以多层继承 一个类只能继承一个父类 父类中private修饰的不能被继承 构造方法不能被继承
}
}
控制台 打印的结果为:
我是无参的构造方法 我会吃饭 我会说话
总结super关键字: super关键字;爱访问父类的成员 1.super只能出现在子类的方法和构造方法中; 2.super调用构造方法时,只能是第一句;
【面向对象设计的3个基本特征】
【⾯向对象设计的3个基本特征】
JAVA中⾯向对象的三⼤特征:
⾯向对象具有继承性(Inheritance)
⾯向对象具有多态性(Polymorphism)
⾯向对象具有封装性(Encapsulation)
⼀、继承
多个类具有共同的属性(成员变量)与⾏为(成员⽅法)的时候,将这些共同的部分抽取出来定义到⼀个公共的类中,其他及各类可以与这个公共的类形成继承关系,从⽽在多个类中不需要重复定义公共部分!这个公共的类就是⽗类,也称为超类或者基类,其他的类就是⼦类。⼦类可以直接访问⽗类的⾮私有化成员变量,访问⽗类的私有化成员变量可以使⽤super.get()⽅法。
1、 Java继承的特点:
A、Java只存在单个继承不存在多个继承,即:⼀个类只能有⼀个⽗类
B、Java可以多层继承,多重继承
2、Java继承的优点
A、继承是基于存在多个重复代码的时候提出的,那么继承能很好的提⾼复⽤率!
B、使类与类之间存在继承关系,是实现多态操作的前提!
C、继承关键字:extends
3、Java继承的缺点
继承使得多个类之间具有了⼦⽗类关系,当⼀个类存在多个⼦类的时候,如果⽗类发⽣变化,那么这些⼦
类会跟着⼀同变化,造成类与类之间的“强耦合”关系!
4、Java继承注意点
A、不要仅仅为了获取某个类的某个功能⽽去继承这个类
B、类与类之间要存在所属关系,不能够随意继承
例:⼈与狗都具有吃饭的动作,
狗为了实现吃饭的动作,⽽继承⼈,这是不合适的!
所谓的所属关系是is--a的关系,也就是说AAA is BB 的....
学⽣是⼈的某⼀个群体,可以同时具有吃饭的动作
面向对象三大特征的理解
面向对象三大特征的理解
面向对象(Object-Oriented Programming,OOP)是计算机科学中的重要概念,是一种编程范式,强调将程序看作一系列对象,将程序开发过程中的代码组织成具有层次结构的类和对象,以及使用类和对象之间的交互来实现程序的功能。OOP 的三大特征如下:
1. 封装(封装):将程序中的敏感信息(如数据和方法)隐藏在类的内部,只向外部暴露一些公共接口供其他对象访问和使用。封装使得类能够更好地保护数据和方法,避免不必要的修改和破坏,同时也使得类更加灵活,可以根据需要随时修改内部状态。
2. 继承(继承):类可以从其他类继承属性和方法,实现类之间的多态性。继承使得类能够更好地模仿其他类的形态和行为,同时也增加了程序的灵活性和可扩展性。
3. 抽象(抽象):抽象类没有具体的实现,只声明了一些公共的接口,需要使用实例化的对象来调用接口方法。抽象类可以减少代码的重复和冗余,同时也使得类更加灵活,可以根据需要随时取消抽象。
除了上述三大特征,OOP还有其他一些重要的特征,如多态性、接口、类层次结构、面向对象编程的原则等。在实际编程中,我们可以根据具体的需求和场景选择合适的编程范式,以更好地组织和管理程序的代码和功能。
除了以上三大特征,面向对象编程还有一些常见的实现方法和技术,如继承、多态、接口、类层次结构、抽象类等。在实际编程中,我们需要根据具体的需求和场景选择合适的实现方法和技术,以更好地组织和管理程序的代码和功能。
面向对象编程是一种重要的编程范式,具有强大的功能和灵活性。在实际编
java面试基础知识
java面试基础知识
java面试基础知识
1、静态变量和实例变量的区别?
在语法定义上的区别:静态变量前要加static关键字,而实例变量前则不加。
在程序运行时的区别:实例变量是属于某个对象的属性,必须创建了实例对象,其
中的实例变量才会被分配内存空间,才可以使用这个实例变量。
静态变量不属于某个实例对象,而是属于类,所以也称为类变量,只要程序加载了
类的字节码,不用创建任何实例对象,静态变量就会分配内存空间,而且只分配一次,静态变量就可以被使用了。总之,实例变量必须创建后才可以通过这个对象来使用,
静态变量则直接可以使用类名来调用。
2、什么是反射机制?
java反射是在运行状态中,对任意一个类,都能够知道这个类的所有属性和方法,
对于任何一个对象,都能够调用它的任意一个属性和方法,这种动态获取信息以及动
态调用对象的方法的功能称为java的反射机制。
3、什么是装箱?什么是拆箱?
装箱:自动将基本数据类型转换为包装器类型。
拆箱:自动将包装器类型转换为基本数据类型。
4、Java 中覆盖和重载是什么意思?
覆盖(Override)是指子类对父类方法的一种重写,只能比父类抛出更少的异常,访
问权限不能比父类的小,被覆盖的方法不能是
private的,否则只是在子类中重新定义了一个新方法。
重载(Overload)表示同一个类中可以有多个名称相同的方法,但这些方法的参数列
表各不相同。
java基础知识面试题及答案
1、static关键字什么意思?java中是否可以覆盖一个private或者是static的方法?
“static”表明一个成员变量或者是成员方法可以在没有所属类的实例变量的情况
面向对象编程三大特性
⾯向对象编程三⼤特性
⾯向对象:以对象为中⼼的编程思想,通过指挥对象实现具体功能。
⾯对过程:以过程为中⼼的编程思想,实现具体功能都是⾃⼰实现。
类和对象的关系:
类:
类是对现实⽣活类中具有共同属性和⾏为的实物的抽象。
类是对象的数据类型,类是具有相同属性和⾏为的⼀组对象的集合。
类就是对现实事务的⼀种描述。
⽽对象则是以类为模板所创建的。
类的组成
*属性:指事物的特征,也就是成员变量。
*⾏为:指事物能执⾏的操作,也就是成员⽅法。
*构造⽅法:
⽅法名与类名⼀致,没有返回值类型,没有返回值。⽤于创建对象,没创建⼀次对象,执⾏⼀次构造⽅法,不能⼿动调⽤构造⽅法。系统默认为⽆参构造,如果定义了构造⽅法,⽆参构造不存在。
对象创建内存模型
(1)当程序开始运⾏,⽅法区以加载好程序所需类的字节码⽂件。
(2)栈内存加载程序,当运⾏到需要创建对象时,会在堆内存中创建对象,此时对象的成员变量为初始值,成员⽅法为地址,指向⽅法区中的类成员⽅法。
(3)堆内存中所创建的对象指向栈内存中引⽤,然后赋值。可以通过对象引⽤找到堆内存中的成员变量进⾏赋值,使⽤成员⽅法则是通过引⽤找到堆内存中的成员⽅法地址,然后在⽅法区中找到具体的成员⽅法。
成员变量和局部变量的区别:
(1)位置不同:成员变量在⽅法外,局部变量在⽅法内部或⽅法声明上
(2)内存位置不同:成员变量在堆内存中,局部变量在栈内存中
(3)声明周期不同:成员变量随对象的存在⽽存在,局部变量随⽅法的调⽤⽽存在,⽅法调⽤结束就消失
(4)初始化值不同:成员变量默认初始化值,局部变量没有默认初始值,必须⾃定义初始化赋值才能使⽤。
面向对象三大基本特性,五大基本原则
⾯向对象三⼤基本特性,五⼤基本原则
透切理解⾯向对象三⼤基本特性是理解⾯向对象五⼤基本原则的基础.
三⼤特性是:封装,继承,多态
所谓封装,也就是把客观事物封装成抽象的类,并且类可以把⾃⼰的数据和⽅法只让可信的类或者对象操作,对不可信的进⾏信息隐藏。封装是⾯向对象的特征之⼀,是对象和类概念的主要特性。简单的说,⼀个类就是⼀个封装了数据以及操作这些数据的代码的逻辑实体。在⼀个对象内部,某些代码或某些数据可以是私有的,不能被外界访问。通过这种⽅式,对象对内部数据提供了不同级别的保护,以防⽌程序中⽆关的部分意外的改变或错误的使⽤了对象的私有部分。
所谓继承是指可以让某个类型的对象获得另⼀个类型的对象的属性的⽅法。它⽀持按级分类的概念。继承是指这样⼀种能⼒:它可以使⽤现有类的所有功能,并在⽆需重新编写原来的类的情况下对这些功能进⾏扩展。通过继承创建的新类称为“⼦类”或“派⽣类”,被继承的类称
为“基类”、“⽗类”或“超类”。继承的过程,就是从⼀般到特殊的过程。要实现继承,可以通过“继承”(Inheritance)和“组合”(Composition)来实现。继承概念的实现⽅式有⼆类:实现继承与接⼝继承。实现继承是指直接使⽤基类的属性和⽅法⽽⽆需额外编码的能⼒;接⼝继承是指仅使⽤属性和⽅法的名称、但是⼦类必须提供实现的能⼒;
所谓多态就是指⼀个类实例的相同⽅法在不同情形有不同表现形式。多态机制使具有不同内部结构的对象可以共享相同的外部接⼝。这意味着,虽然针对不同对象的具体操作不同,但通过⼀个公共的类,它们(那些操作)可以通过相同的⽅式予以调⽤。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
透切理解面向对象三大基本特性是理解面向对象五大基本原则的基础
三大特性是:封装,继承,多态
所谓封装,也就是把客观事物封装成抽象的类,并且类可以把自己的数据和方法只让可信的类或者对象操作,对不可信的进行信息隐藏。封装是面向对象的特征之一,是对象和类概念的主要特性。简单的说,一个类就是一个封装了数据以及操作这些数据的代码的逻辑实体。在一个对象内部,某些代码或某些数据可以是私有的,不能被外界访问。通过这种方式,对象对内部数据提供了不同级别的保护,以防止程序中无关的部分意外的改变或错误的使用了对象的私有部分。
所谓继承是指可以让某个类型的对象获得另一个类型的对象的属性的方法。它支持按级分类的概念。继承是指这样一种能力:它可以使用现有类的所有功能,并在无需重新编写原来的类的情况下对这些功能进行扩展。通过继承创建的新类称为“子类”或“派生类”,被继承的类称为“基类”、“父类”或“超类”。继承的过程,就是从一般到特殊的过程。要实现继承,可以通过“继承”(Inheritance)和“组合”(Composition)来实现。继承概念的实现方式有二类:实现继承与接口继承。实现继承是指直接使用基类的属性和方法而无需额外编码的能力;接口继承是指仅使用属性和方法的名称、但是子类必须提供实现的能力;
所谓多态就是指一个类实例的相同方法在不同情形有不同表现形式。多态机制使具有不同内部结构的对象可以共享相同的外部接口。这意味着,虽然针对不同对象的具体操作不同,但通过一个公共的类,它们(那些操作)可以通过相同的方式予以调用。
五大基本原则
单一职责原则SRP(Single Responsibility Principle)
是指一个类的功能要单一,不能包罗万象。如同一个人一样,分配的工作不能太多,否则一
天到晚虽然忙忙碌碌的,但效率却高不起来。
开放封闭原则OCP(Open-Close Principle)
一个模块在扩展性方面应该是开放的而在更改性方面应该是封闭的。比如:一个网络模块,原来只服务端功能,而现在要加入客户端功能,
那么应当在不用修改服务端功能代码的前提下,就能够增加客户端功能的实现代码,这要求在设计之初,就应当将服务端和客户端分开,公共部分抽象出来。
替换原则(the Liskov Substitution Principle LSP)
子类应当可以替换父类并出现在父类能够出现的任何地方。比如:公司搞年度晚会,所有员工可以参加抽奖,那么不管是老员工还是新员工,
也不管是总部员工还是外派员工,都应当可以参加抽奖,否则这公司就不和谐了。
依赖原则(the Dependency Inversion Principle DIP) 具体依赖抽象,上层依赖下层。假设B是较A低的模块,但B需要使用到A的功能,
这个时候,B不应当直接使用A中的具体类:而应当由B定义一抽象接口,并由A来实现这个抽象接口,B只使用这个抽象接口:这样就达到
了依赖倒置的目的,B也解除了对A的依赖,反过来是A依赖于B定义的抽象接口。通过上层模块难以避免依赖下层模块,假如B也直接依赖A的实现,那么就可能造成循环依赖。一个常见的问题就是编译A模块时需要直接包含到B模块的cpp文件,而编译B时同样要直接包含到A的cpp文件。
接口分离原则(the Interface Segregation Principle ISP)
模块间要通过抽象接口隔离开,而不是通过具体的类强耦合起来