百度
360搜索
搜狗搜索

什么是面向对象方法的封装性,OOP的三大特性是什么?详细介绍

本文目录一览: 面向对象中什么是封装

面向对象中什么是封装在面向对象程式设计方法中,封装是指一种将抽象性函式接口的实现细节部分包装、隐藏起来的方法,封装可以被认为是一个保护屏障,防止该类的代码和数据被外部类定义的代码随机访问。面向对象编程面向对象(Object Oriented)是软件开发方法。面向对象的概念和应用已超越了程序设计和软件开发,扩展到如数据库系统、交互式界面、应用结构、应用平台、分布式系统、网络管理结构、CAD技术、人工智能等领域。面向对象是一种对现实世界理解和抽象的方法,是计算机编程技术发展到一定阶段后的产物。面向对象是相对于面向过程来讲的,面向对象方法,把相关的数据和方法组织为一个整体来看待,从更高的层次来进行系统建模,更贴近事物的自然运行模式。推荐教程:《PHP教程》

面向对象方法的主要特征有哪些?

面向对象的编程语言(Object-oriented Programming Language)是专门为面向对象观念而发展出来的,通过它可以便捷地实现面向对象的封装、继承、多态等特性。1.封装封装是一种信息隐藏技术,即对象内部对用户是隐藏的,不可直接访问;用户只能见到对象封装界面上的信息,通过对象的外部接口访问对象。封装的目的在于将对象的使用者和对象的设计者分开,使用者无须知道对象内部实现的细节,只需要知道对象接收的消息即可。当用户向对象发送消息后,对象将根据收到的消息来调用内部方法以做出响应。在C++语言中,对象的构成由类来描述,每个类的成员可以分为私有和公有两种类型,对象的外部不能直接访问对象的私有部分。对象的封装特性可以提高模块之间的独立性,使得系统易于调试和维护。假设应用系统中有两个模块:一个模块从计算机的串行通讯口接收数据,放入缓冲区;另一个为数据处理模块。数据处理模块可以直接访问缓冲区,从缓冲区中读取数据。此时这两个模块之间的关联程度密切,模块独立性很差。如果接收数据的模块改变缓冲区的管理方法,则第二个模块必须做相应的改变。如果数据处理模块对缓冲区操作有误,将影响数据接收模块,在程序调试时难以确定错误发生在哪一个模块中。实际上,数据处理模块并不需要缓冲区的管理信息,它只需要知道缓冲区中有没有数据以及有什么样的数据。上面的处理方法违反了软件工程中的信息隐藏原则,数据处理模块访问了它不需要的信息。将数据接收模块封装为一个对象,缓冲区的管理信息作为其私有数据,即可避免上面的问题。数据接收模块只要提供一个从缓冲区获得数据的接口即可。数据处理模块只能访问该接口,而不能直接操作缓冲区。此时两个模块之间的独立性提高,如需改变缓冲区的管理方法,只需修改数据接收模块,数据处理模块将不受任何影响,因为数据接收模块提供的外部接口没有改变。2.继承人们在对客观世界的事物进行描述时,经常采取分类的方法。类是有层次的,即某个大类的事物可能分为若干小类,而这些小类可能又分为若干个更小的类。面向对象思想采纳了事物分类的层次思想,在描述类的时候,某些类之间具有结构和行为的共性。例如教师类与学生类,在结构方面均具有姓名、年龄、身高、体重等,在行为(或操作)方面均具有回答身高、回答体重等操作。将这些共性抽取出来,形成一个单独的类--人,描述教师类和学生类中的共性。类(人)的结构特征和行为特征可以被多个相关的类共享,例如教师类和学生类继承了人的结构和行为特征。在C++语言中,通过类的派生机制来实现类的继承,可以从一个类中派生出一个新的类,这个类称为派生类的基类或父类,派生出的新类称为基类的派生类或子类。派生类的对象具有基类对象的特征,同时又有其自身特有的特征。一个教师类的对象与一个学生类的对象都具有人这个类所描述的特征,同时又具有教师类和学生类各自所特有的特征。利用类之间的继承关系,可以简化类的描述。在人这个类中描述教师类和学生类的共性,而在学生类和教师类中只需描述各自的个性。利用继承机制可以提高软件代码的可重用性。在设计一个新类时,不必从头设计和编写全部的代码,可以通过从已有的具有类似特性的类中派生出一个类,继承原有类中的部分特性,再加上所需要的新特性。这一点与面向过程的设计语言中的过程或函数不同,在面向过程的设计语言中,要使用具有相似功能的过程或函数,必须修改源程序代码以使其适应新系统的功能需求,而类的派生机制无需原有类的源代码即可派生出新的类。利用类及其继承性描述系统时,由于类之间的继承关系,可能会形成一种具有层次性的类结构。在使用类的层次结构描述系统时,某些类之间的层次关系可以有多种实现方案。例如中学生类,既可以直接从人这个类派生出来,也可以从人这个类的派生类--学生类派生出来。在设计类的层次结构时,应注意建立的类层次结构是否易于理解以及组织类结构的费用等方面的问题。设计出来的类层次结构是否合理,往往取决于系统分析员的经验等因素。3.多态性多态性是面向对象系统的又一重要特性。所谓多态,即一个名词可具有多种语义。在C++语言中,多态性主要表现在以下两个方面。(1) 重载在C++语言中,同一函数名以及运算符可以具有不同含义的多种实现版本,编译器将根据函数调用的参数形式决定调用哪一种实现版本。(2) 虚函数C++语言引入了虚函数机制,允许在不同类层次对象中应用函数成员的不同版本。例如实现一个类Shape,然后从该类派生出画点的类Point、画圆的类Circle、画直线的类Line,每一种图形的画法均不同,但是它们都有几种共同的操作--显示图形、擦除图形、移动图形。移动图形的操作都是首先擦除图形,然后改变图形的位置基准点,再在新位置显示出图形。在类Shape中实现移动图形的操作,每种图形的显示、擦除、改变基准点等操作在派生类中分别实现。若程序中使用某图形对象的移动操作,编译器采用动态联编的手段,在执行时根据该图形对象是哪一个类的实例,决定调用哪一个类的显示、擦除、改变基准点的方法。这种多态性称为运行时的多态性。而重载在编译时编译器即可确定使用哪一个实现版本,是静态的。
(1)对象唯一性。
  每个对象都有自身唯一的标识,通过这种标识,可找到相应的对象。在对象的整个生命期中,它的标识都不改变,不同的对象不能有相同的标识。
  (2)抽象性。
  分类性是指将具有一致的数据结构(属性)和行为(操作)的对象抽象成类。一个类就是这样一种抽象,它反映了与应用有关的重要性质,而忽略其他一些无关内容。任何类的划分都是主观的,但必须与具体的应用有关。
  (3)继承性。
  继承性是子类自动共享父类数据结构和方法的机制,这是类之间的一种关系。在定义和实现一个类的时候,可以在一个已经存在的类的基础之上来进行,把这个已经存在的类所定义的内容作为自己的内容,并加入若干新的内容。
  继承性是面向对象程序设计语言不同于其它语言的最重要的特点,是其他语言所没有的。
  在类层次中,子类只继承一个父类的数据结构和方法,则称为单重继承。
  在类层次中,子类继承了多个父类的数据结构和方法,则称为多重继承。
  在软件开发中,类的继承性使所建立的软件具有开放性、可扩充性,这是信息组织与分类的行之有效的方法,它简化了对象、类的创建工作量,增加了代码的可重性。
  采用继承性,提供了类的规范的等级结构。通过类的继承关系,使公共的特性能够共享,提高了软件的重用性。
  (4)多态性(多形性)
  多态性是指相同的操作或函数、过程可作用于多种类型的对象上并获得不同的结果。不同的对象,收到同一消息可以产生不同的结果,这种现象称为多态性。
  多态性允许每个对象以适合自身的方式去响应共同的消息。
  多态性增强了软件的灵活性和重用性。 望采纳
Java是一门面向对象的语言,面向对象的主要特点有封装,继承,多态
封装,意思就是把类的一些属性进行封装(“隐藏”),尽可能的避免直接访问对象一些属性,以保证其安全性,如果必须要访问这些属性,我们可以单独的提供一些接口(共有方法)进行访问,这样我们就可以避免因为直接访问属性信息造成的误操作。
继承,在我们的生活中也有很多的继承关系,比如子承父业,在Java中,我们也可以有继承的概念,但是继承只存在于父子类(接口)中,比如我们经常说的Dog类继承于Animal类,动物类Animal具有自己的一些属性,Dog属于Animal的一种,所以具有Animal的一些属性,但是Dog也有自己的一些特定属性,这时候如果我们单独在重新创建一个类Dog,就需要重新写一遍Animal类的属性,既费时又不好维护,这时候我们就可以使用继承,使用Dog类继承Animal类,这时候,Dog就包含了Animal类的一些属性,就不需要我们多次重复写这些属性了。
多态,即对于同一个对象,可能执行出不同的结果,比如上面的Animal类,我们创建他的两个子类,分别为Dog和Cat,Animal有个方法叫做public void jiaoSheng() { System.out.println( “动物叫声” ) ; } 两个子类分别重写了这个方法,实现形式Dog:public void jiaoSheng() { System.out.pringln( “狗叫声” ) ; }, Cat: public void jiaoSheng() { System.out.println( “猫叫声” ) ; },这时候我们可以创建一个Animal对象 animal = new Animal( );这时候我们调用animal.jiaoSheng() ;打印出 “动物叫声”;当animal = new Dog( ) ;的时候,我们调用animal.jiaoSheng() ; 打印出 “狗叫声”;当 animal = new Cat() ;的时候,我们调用animal.jiaoSheng() ; 打印出“猫叫声”;对于同一个对象animal我们调用同一个方法的时候,打印出的结果是不相同的,利用多态,我们就可以进行很多的扩展,而不需要过多的去修改原先的代码,可以保证代码的可维护性;从上面我们可以看得出来,如果要有多态,需要满足三个条件,第一个继承(或实现接口),第二个重写,也就是需要重写父类里面的方法,否则不会实现多态,对象调用的还是父类的方法,第三个父类引用指向子类对象,就像上面的animal他是一个Animal类的对象,但我们new的时候,创建的是子类Dog和Cat类的两个对象;
以下为源码示例:
public class Animal{
public void jiaoSheng() {
System.out.println(“动物叫声”);
}
}
public class Dog extends Animal{
@Override
public void jiaoSheng() {
System.out.println(“狗叫声”);
}
}
public class Cat extends Animal{
@Override
public void jiaoSheng() {
System.out.println(“猫叫声”);
}
}
更多java学习方面的问题可以访问这个网页,网页链接,希望我的回答能帮到你。
多,继,封
面向对象方法的主要特征有:
1、封装性
封装是一种信息隐蔽技术,它体现于类的说明,是对象的重要特性。封装使数据和加工该数据的方法(函数)封装为一个整体,以实现独立性很强的模块,使得用户只能见到对象的外特性(对象能接受哪些消息,具有那些处理能力),而对象的内特性(保存内部状态的私有数据和实现加工能力的算法)对用户是隐蔽的。
2、继承性
继承性是子类自动共享父类之间数据和方法的机制。它由类的派生功能体现。一个类直接继职其它类的全部描述,同时可修改和扩充。
3、多态性
对象根据所接收的消息而做出动作。同一消息为不同的对象接受时可产生完全不同的行动,这种现象称为多态性。利用多态性用户可发送一个通用的信息,而将所有的实现细节都留给接受消息的对象自行决定,如是,同一消息即可调用不同的方法。
扩展资料
面向对象方法的优越性
(1)强调从现实世界中客观存在的事物(对象)出发来认识问题域和构造系统,这就使系统开发者大大减少了对问题域的理解难度,从而使系统能更准确地反映问题域。
(2)运用人类日常的思维方法和原则(体现于OO方法的抽象、分类、继承、封装、消息通讯等基本原则)进行系统开发,有益于发挥人类的思维能力,并有效地控制了系统复杂性。
(3)对象的概念贯穿于开发过程的终,使各个开发阶段的系统成分具良好的对应,从而显著地提高了系统的开发效率与质量,并大大降低系统维护的难度。
(4)对象概念的一致性,使参与系统开发的各类人员在开发的各所段具有共同语言,有效地改善了人员之间的交流和协作。
(5)对象的相对稳定性和对易变因素隔离,增强了系统的应变能力。
(6)对象类之间的继承关系和对象的相对独立性,对软件复用提供了强有力的支持。

哪些是面向对象程序设计的三大特征

面向对象程序设计的基本特征有:1,封装性:封装性是指将对象相关的信息和行为状态捆绑成一个单元,即将对象封装为一个具体的类。封装隐藏了对象的具体实现,当要操纵对象时,只需调用其中的方法,而不用管方法的具体实现。2,继承性:一个类继
封装性、继承性、多态性。
1、封装性:
具备封装性(Encapsulation)的面向对象编程隐藏了某一方法的具体运行步骤,取而代之的是通过消息传递机制发送消息给它。封装是通过限制只有特定类的对象可以访问这一特定类的成员,而它们通常利用接口实现消息的传入传出。
通常来说,成员会依它们的访问权限被分为3种:公有成员、私有成员以及保护成员。有些语言更进一步:Java可以限制同一包内不同类的访问;C#和VB.NET保留了为类的成员聚集准备的关键字:internal(C#)和Friend(VB.NET);Eiffel语言则可以让用户指定哪个类可以访问所有成员。
具备封装性(Encapsulation)的面向对象程序设计隐藏了某一方法的具体执行步骤,取而代之的是通过消息传递机制传送消息给它。
2、继承性:
继承性是面向对象技术中的另外一个重要特点,其主要指的是两种或者两种以上的类之间的联系与区别。继承,顾名思义,是后者延续前者的某些方面的特点,而在面向对象技术则是指一个对象针对于另一个对象的某些独有的特点、能力进行复制或者延续。
如果按照继承源进行划分,则可以分为单继承(一个对象仅仅从另外一个对象中继承其相应的特点)与多继承(一个对象可以同时从另外两个或者两个以上的对象中继承所需要的特点与能力,并且不会发生冲突等现象)。
如果从继承中包含的内容进行划分,则继承可以分为四类,分别为取代继承(一个对象在继承另一个对象的能力与特点之后将父对象进行取代);
包含继承(一个对象在将另一个对象的能力与特点进行完全的继承之后,又继承了其他对象所包含的相应内容,结果导致这个对象所具有的能力与特点大于等于父对象,实现了对于父对象的包含)、受限继承、特化继承。
3、多态性:
从宏观的角度来讲,多态性是指在面向对象技术中,当不同的多个对象同时接收到同一个完全相同的消息之后,所表现出来的动作是各不相同的,具有多种形态。
从微观的角度来讲,多态性是指在一组对象的一个类中,面向对象技术可以使用相同的调用方式来对相同的函数名进行调用,即便这若干个具有相同函数名的函数所表示的函数是不同的。
扩展资料:
面向对象编程语言
支持部分或绝大部分面向对象特性的语言即可称为基于对象的或面向对象的语言。Simula (1967)被视为第一个具有面向对象特性的语言。早期,完全面向对象的语言主要包括Smalltalk等语言,目前较为流行的语言中有Java、C#、Eiffel等。
随着软件工业的发展,比较早的面向过程的语言在近些年的发展中也纷纷吸收了许多面向对象的概念,比如C→C++,C→Objective-C,BASIC→Visual Basic→Visual Basic .NET,Pascal→Object Pascal,Ada→Ada95。
“纯粹”的面向对象语言, 因为所有的东西都是由对象所组成,例如:Eiffel,Emerald,JADE,Obix,Ruby,Scala,Smalltalk,Self。
脚本中的OOP
近年来,面向对象的程序设计越来越流行于脚本语言中。Python和Ruby是创建在OOP原理的脚本语言,Perl和PHP亦分别在Perl 5和PHP 4时加入面向对象特性。

面向对象方法的特点是什么

面向对象方法的特点是封装性。封装是一种信息隐蔽技术,它体现于类的说明,是对象的重要特性。封装使数据和加工该数据的方法封装为一个整体,以实现独立性很强的模块,使得用户只能见到对象的外特性而对象的内特性对用户是隐蔽的。封装的目的在于把对象的设计者和对象者的使用分开,使用者不必知晓行为实现的细节,只须用设计者提供的消息来访问该对象。
更多关于面向对象方法的特点是什么,进入:https://www.abcgonglue.com/ask/0ad3711616100006.html?zd查看更多内容

说明并理解面向对象的开发方法中的对象、类、封装、继承等概念。

【答案】:面向对象的开发方法:是一种综合运用对象、类、继承、封装、聚合、消息传送、多态性等概念来构造系统的软件开发方法。
对象就是客观世界中的任何事物在计算机程序世界里的抽象表示,或者说,是现实世界中个体数据的抽象模型。
类,又称为对象类,是具有相同或相似结构、操作和约束规则的对象组成的集合,是一组对象的属性和行为特征的抽象描述。或者说,是具有共同属性、共同操作方法(性质)的对象集合,包括标识、继承、数据结构、操作和接口。
封装又称信息隐藏,把对象及对象的方法、操作的实现封闭在一起,对象的封装性是面向对象技术的一个重要的特征。这实际上是一种信息隐蔽技术,使对象的使用者只能看到封装界面上的信息,对象的内部是隐蔽的。
不同对象收到同一消息后可能产生完全不同的结果,这种现象称为多态。
继承是指一个类因承袭而具有另一个类的能力和特征的机制或关系。父类具有通用性,而子类具有特殊性。子类可以从其父类甚至祖先那里继承方法和属性。

在Java面向对象的编程当中的为什么要封装?什么叫封装?

封装指的是将对象的状态信息(属性)和行为(方法)捆绑为一个逻辑单元的机制。
Java中通过将数据封装、声明为私有的(private),再提供一个或多个公开的(public)方法实现对该属性的操作,以实现下述目的:
隐藏一个类的实现细节;
防止对封装数据的未经授权的访问。使用者只能通过事先定制好的方法来访问数据,可以方便地加入控制逻辑,限制对属性的不合理操作;
有利于保证数据的完整性;
便于修改,增强代码的可维护性.
java面向对象编程中所谓封装,就是通过定义类并且给类的属性和方法加上访问控制来抽象事物的本质特性。
封装就是定义一个类,然后给该类的属性(成员变量)和方法加上访问控制修饰词(public,private, protected,默认包访问权限),使得该类的属性和方法对于类外部来说,想可见的可见,不想可见的隐藏。就是把数据和行为结合在一起在一个包中,并对对象使用者隐藏数据的实现过程。Java用3个关键字来设置边界,从而进行对数据的隐藏。Public(共有)的定义任何人都可使用.private(私有)意味着除你自己,类型创建者及那个类型的内部函数成员可以访问外其他任何人使用都会产生错误。Friendly(友好)
意味在包(package)中是可以访问的.

OOP的三大特性是什么?

1、封装性:在面向对象技术的相关原理以及程序语言中,封装的最基本单位是对象,而使得软件结构的相关部件的实现“高内聚、低耦合”的“最佳状态”便是面向对象技术的封装性所需要实现的最基本的目标。
2、继承性:继承性是面向对象技术中的另外一个重要特点,其主要指的是两种或者两种以上的类之间的联系与区别。继承是后者延续前者的某些方面的特点,而在面向对象技术则是指一个对象针对于另一个对象的某些独有的特点、能力进行复制或者延续。
3、多态性:从宏观的角度来讲,多态性是指在面向对象技术中,当不同的多个对象同时接收到同一个完全相同的消息之后,所表现出来的动作是各不相同的;从微观的角度来讲,多态性是指在一组对象的一个类中,面向对象技术可以使用相同的调用方式来对相同的函数名进行调用。
扩展资料
OOP的主要特点:
1、对象唯一性。每个对象都有自身唯一的标识,通过这种标识,可找到相应的对象。在对象的整个生命期中,它的标识都不改变,不同的对象不能有相同的标识。
2、抽象性。一个类就是这样一种抽象,它反映了与应用有关的重要性质,而忽略其他一些无关内容。任何类的划分都是主观的,但必须与具体的应用有关。
3、多形性。多形性是指相同的操作或函数、过程可作用于多种类型的对象上并获得不同的结果。不同的对象,收到同一消息可以产生不同的结果,这种现象称为多形性。
参考资料来源:百度百科-OOP
有分送呀。三大特性:封装、继承、多态。
面向对象编程的三大特性是封装性、继承性、多态性。
1、封装性:封装是指将一个计算机系统中的数据以及与这个数据相关的一切操作语言组装到一起,一并封装在一个有机的实体中,把它们封装在一个“模块”中,也就是一个类中,为软件结构的相关部件所具有的模块性提供良好的基础。
2、继承性:是面向对象技术中的另外一个重要特点,其主要指的是两种或者两种以上的类之间的联系与区别。继承,顾名思义,是后者延续前者的某些方面的特点,而在面向对象技术则是指一个对象针对于另一个对象的某些独有的特点、能力进行复制或者延续。
3、多态性:从宏观的角度来讲,多态性是指在面向对象技术中,当不同的多个对象同时接收到同一个完全相同的消息之后,所表现出来的动作是各不相同的,具有多种形态;
从微观的角度来讲,多态性是指在一组对象的一个类中,面向对象技术可以使用相同的调用方式来对相同的函数名进行调用,即便这若干个具有相同函数名的函数所表示的函数是不同的。
扩展资料
面向对象程序设计的优点:
1、数据抽象的概念可以在保持外部接口不变的情况下改变内部实现,从而减少甚至避免对外界的干扰;
2、通过继承大幅减少冗余的代码,并可以方便地扩展现有代码,提高编码效率,也减低了出错概率,降低软件维护的难度;
3、以对象为中心的设计可以帮助开发人员从静态(属性)和动态(方法)两个方面把握问题,从而更好地实现系统;
4、通过对象的聚合、联合可以在保证封装与抽象的原则下实现对象在内在结构以及外在功能上的扩充,从而实现对象由低到高的升级。
5、结合面向对象分析、面向对象设计,允许将问题域中的对象直接映射到程序中,减少软件开发过程中中间环节的转换过程;
6、通过对对象的辨别、划分可以将软件系统分割为若干相对为独立的部分,在一定程度上更便于控制软件复杂度。
参考资料来源:百度百科-面向对象程序设计 (一种计算机编程架构)

在Java面向对象的编程当中的为什么要封装?什么叫封装?

java面向对象编程中所谓封装,就是通过定义类并且给类的属性和方法加上访问控制来抽象事物的本质特性。
封装就是定义一个类,然后给该类的属性(成员变量)和方法加上访问控制修饰词(public,private, protected,默认包访问权限),使得该类的属性和方法对于类外部来说,想可见的可见,不想可见的隐藏。就是把数据和行为结合在一起在一个包中,并对对象使用者隐藏数据的实现过程。Java用3个关键字来设置边界,从而进行对数据的隐藏。Public(共有)的定义任何人都可使用.private(私有)意味着除你自己,类型创建者及那个类型的内部函数成员可以访问外其他任何人使用都会产生错误。Friendly(友好)
意味在包(package)中是可以访问的.
封装就将属性私有化 通过修改属性的可见性 来限制对属性的访问和修改
我个人简单的认为就是你所说的那样的..."因为有些东西是私有的,就像一样东西不是什么人都能看得到的,封装就是把所有的属性锁住,不给外部查看。"
说的通俗一点就是把方法写好,然后你直接调用。
概念:所谓封装,就是通过定义类并且给类的属性和方法加上访问控制来抽象事物的本质特性.
这个意思:
封装就是定义一个类,然后给该类的 属性(成员变量) 和 方法 加上 访问控制修饰词(public,private,
protected,默认包访问权限),使得该类的属性和方法对于类外部来说,想可见的可见,不想可见的隐藏。
所以,通过封装这个手段,就抽象出来了事物的本质特性。
对上面进行进一步的解释:
什么叫抽象?比如拿 人类 来举例子,封装是一种手段,通过封装定义出来的这个类,和现实当中的人这个实体(对象),他们之间就是一种抽象,我们现实当中只存在一个一个的人(对象),人类只是一个概念性的东西,是我们人自己归纳总结出来的,我们知道人都长什么样,所以我们知道符合这个样子的就叫人,人的大脑总是习惯将事物分类,因此人类的概念就出现了,那么我们发现一个一个的人,都有眼睛鼻子嘴(属性),都能吃饭(方法),等等,这就是人这个事物的本质特性,然后我们得编程啊,人类的概念光在脑海中出现了还不行,还得体现到代码上,那么你想体现到代码上,也就是定义一个类,就要使用封装这个手段。
为什么要加上访问控制?
一是,有些东西是很关键很机密的,不想随便被使用,被改变,被访问。
二是,可能这个东西不是很关键机密,访问和改变也无所谓,但是,因为有些属性和方法,它们对于外部来说,是无关的没用的,但是对于我自己这个类来说,是必要的,因为可能在我自己这个类中要使用它们,这个时候,进行隐藏,不让外部看,好处就是,如果将这些不必要的内容也暴露给外部的话,那么在使用的时候,使用者会被迷惑,因为这个东西对他没用,但是又可以调用,访问,而且他又不知道又没有用,但是如果进行隐藏,不给外部查看,那么就很清晰了,因为这样一来,只要是对外暴露的属性方法,都是有用的,你想一下,JDK的类库里面的那些类,比如String类,对外暴露的属性和方法,哪个是无用的?这也是一种良好的编程习惯和规范。
说了这么多,其实我的理解也有限,面向对象思想又不局限于某种语言,楼主仔细体会一下吧,我说的可能也不全对,这只是我个人的一点理解。
刚才上网搜到了一句话,不是我说的,但我感觉说的也不错,可以仔细体会一下:
封装是人们对现实世界中解决问题时,为了进行简化问题,对研究的对象所采用的一种方法,一种信息屏蔽技术。

面向对象编程三大特性-封装、继承、多态

封装从字面上来理解就是包装的意思,专业点就是信息隐藏,是指利用抽象数据类型将数据和基于数据的操作封装在一起,使其构成一个不可分割的独立实体,数据被保护在抽象数据类型的内部,尽可能地隐藏内部的细节,只保留一些对外接口使之与外部发生联系。系统的其他对象只能通过包裹在数据外面的已经授权的操作来与这个封装的对象进行交流和交互。也就是说用户是无需知道对象内部的细节,但可以通过该对象对外的提供的接口来访问该对象。
对于封装而言,一个对象它所封装的是自己的属性和方法,所以它是不需要依赖其他对象就可以完成自己的操作。使用封装有三大好处:
封装把一个对象的属性私有化,同时提供一些可以被外界访问的属性的方法,如果不想被外界方法,我们大可不必提供方法给外界访问。但是如果一个类没有提供给外界访问的方法,那么这个类也没有什么意义了。
封装可以使我们容易地修改类的内部实现,而无需修改使用了该类的客户代码。就可以对成员变量进行更精确的控制。
2.1 继承综述
继承是使用已存在的类的定义作为基础建立新类的技术,新类的定义可以增加新的数据或新的功能,也可以用父类的功能,但不能选择性地继承父类。通过使用继承我们能够非常方便地复用以前的代码,能够大大的提高开发的效率。
继承所描述的是“is-a”的关系,如果有两个对象A和B,若可以描述为“A是B”,则可以表示A继承B,其中B是被继承者称之为父类或者超类,A是继承者称之为子类或者派生类。
实际上继承者是被继承者的特殊化,它除了拥有被继承者的特性外,还拥有自己独有得特性。例如猫有抓老鼠、爬树等其他动物没有的特性。同时在继承关系中,继承者完全可以替换被继承者,反之则不可以,例如我们可以说猫是动物,但不能说动物是猫就是这个道理,其实对于这个我们将其称之为“向上转型”。
诚然,继承定义了类如何相互关联,共享特性。对于若干个相同或者相识的类,我们可以抽象出他们共有的行为或者属相并将其定义成一个父类或者超类,然后用这些类继承该父类,他们不仅可以拥有父类的属性、方法还可以定义自己独有的属性或者方法。
同时在使用继承时需要记住三句话:
学习继承一定少不了这三个东西: 构造器、protected关键字、向上转型
2.2 构造器
通过前面我们知道子类可以继承父类的属性和方法,除了那些private的外还有一样是子类继承不了的---构造器。对于构造器而言,它只能够被调用,而不能被继承。 调用父类的构造方法我们使用super()即可。
构建过程是从父类“向外”扩散的,也就是从父类开始向子类一级一级地完成构建。而且我们并没有显示的引用父类的构造器,这就是java的聪明之处:编译器会默认给子类调用父类的构造器。
但是,这个默认调用父类的构造器是有前提的:父类有默认构造器。如果父类没有默认构造器,我们就要必须显示的使用super()来调用父类构造器,否则编译器会报错:无法找到符合父类形式的构造器。
对于子类而已,其构造器的正确初始化是非常重要的,而且当且仅当只有一个方法可以保证这点:在构造器中调用父类构造器来完成初始化,而父类构造器具有执行父类初始化所需要的所有知识和能力。
对于继承而言,子类会默认调用父类的构造器,但是如果没有默认的父类构造器,子类必须要显示的指定父类的构造器,而且必须是在子类构造器中做的第一件事(第一行代码)。
2.3 protected关键字
private访问修饰符,对于封装而言,是最好的选择,但这个只是基于理想的世界,有时候我们需要这样的需求:我们需要将某些事物尽可能地对这个世界隐藏,但是仍然允许子类的成员来访问它们。这个时候就需要使用到protected。
对于protected而言,它指明就类用户而言,他是private,但是对于任何继承与此类的子类而言或者其他任何位于同一个包的类而言,他却是可以访问的。
2.4 向上转型
在上面的继承中我们谈到继承是is-a的相互关系,猫继承与动物,所以我们可以说猫是动物,或者说猫是动物的一种。这样将猫看做动物就是向上转型。
在这我们通过Person.display(husband)。这句话可以看出husband是person类型。
将子类转换成父类,在继承关系上面是向上移动的,所以一般称之为向上转型。由于向上转型是从一个叫专用类型向较通用类型转换,所以它总是安全的,唯一发生变化的可能就是属性和方法的丢失。这就是为什么编译器在“未曾明确表示转型”活“未曾指定特殊标记”的情况下,仍然允许向上转型的原因。
2.5 谨慎继承
在这里我们需要明确,继承存在如下缺陷:
所以说当我们使用继承的时候,我们需要确信使用继承确实是有效可行的办法。那么到底要不要使用继承呢?《Think in java》中提供了解决办法:问一问自己是否需要从子类向父类进行向上转型。如果必须向上转型,则继承是必要的,但是如果不需要,则应当好好考虑自己是否需要继承。
3.1 多态综述
所谓多态就是指程序中定义的引用变量所指向的具体类型和通过该引用变量发出的方法调用在编程时并不确定,而是在程序运行期间才确定,即一个引用变量倒底会指向哪个类的实例对象,该引用变量发出的方法调用到底是哪个类中实现的方法,必须在由程序运行期间才能决定。因为在程序运行时才确定具体的类,这样,不用修改源程序代码,就可以让引用变量绑定到各种不同的类实现上,从而导致该引用调用的具体方法随之改变,即不修改程序代码就可以改变程序运行时所绑定的具体代码,让程序可以选择多个运行状态,这就是多态性。
所以对于多态我们可以总结如下:
指向子类的父类引用由于向上转型了,它只能访问父类中拥有的方法和属性,而对于子类中存在而父类中不存在的方法,该引用是不能使用的,尽管是重载该方法。若子类重写了父类中的某些方法,在调用该些方法的时候,必定是使用子类中定义的这些方法(动态连接、动态调用)。
对于面向对象而言,多态分为编译时多态和运行时多态。其中编辑时多态是静态的,主要是指方法的重载,它是根据参数列表的不同来区分不同的函数,通过编辑之后会变成两个不同的函数,在运行时谈不上多态。而运行时多态是动态的,它是通过动态绑定来实现的,也就是我们所说的多态性。
3.2 多态的实现条件
在刚刚开始就提到了继承在为多态的实现做了准备。子类Child继承父类Father,我们可以编写一个指向子类的父类类型引用,该引用既可以处理父类Father对象,也可以处理子类Child对象,当相同的消息发送给子类或者父类对象时,该对象就会根据自己所属的引用而执行不同的行为,这就是多态。即多态性就是相同的消息使得不同的类做出不同的响应。
Java实现多态有三个必要条件:继承、重写、向上转型。
继承:在多态中必须存在有继承关系的子类和父类。
重写:子类对父类中某些方法进行重新定义,在调用这些方法时就会调用子类的方法。
向上转型:在多态中需要将子类的引用赋给父类对象,只有这样该引用才能够具备技能调用父类的方法和子类的方法。
只有满足了上述三个条件,我们才能够在同一个继承结构中使用统一的逻辑实现代码处理不同的对象,从而达到执行不同的行为。
对于Java而言,它多态的实现机制遵循一个原则:当超类对象引用变量引用子类对象时,被引用对象的类型而不是引用变量的类型决定了调用谁的成员方法,但是这个被调用的方法必须是在超类中定义过的,也就是说被子类覆盖的方法。
3.3 实现形式
在Java中有两种形式可以实现多态:继承和接口。
3.2.1、基于继承实现的多态
基于继承的实现机制主要表现在父类和继承该父类的一个或多个子类对某些方法的重写,多个子类对同一方法的重写可以表现出不同的行为。
基于继承实现的多态可以总结如下:对于引用子类的父类类型,在处理该引用时,它适用于继承该父类的所有子类,子类对象的不同,对方法的实现也就不同,执行相同动作产生的行为也就不同。
如果父类是抽象类,那么子类必须要实现父类中所有的抽象方法,这样该父类所有的子类一定存在统一的对外接口,但其内部的具体实现可以各异。这样我们就可以使用顶层类提供的统一接口来处理该层次的方法。
3.2.2、基于接口实现的多态
继承是通过重写父类的同一方法的几个不同子类来体现的,那么就可就是通过实现接口并覆盖接口中同一方法的几不同的类体现的。
在接口的多态中,指向接口的引用必须是指定这实现了该接口的一个类的实例程序,在运行时,根据对象引用的实际类型来执行对应的方法。
继承都是单继承,只能为一组相关的类提供一致的服务接口。但是接口可以是多继承多实现,它能够利用一组相关或者不相关的接口进行组合与扩充,能够对外提供一致的服务接口。所以它相对于继承来说有更好的灵活性。
3.2.3、经典实例分析
运行结果:
分析如下:
①②③比较好理解,一般不会出错。④⑤就有点糊涂了,为什么输出的不是"B and B”呢?
当超类对象引用变量引用子类对象时,被引用对象的类型而不是引用变量的类型决定了调用谁的成员方法,但是这个被调用的方法必须是在超类中定义过的,也就是说被子类覆盖的方法。(但是如果强制把超类转换成子类的话,就可以调用子类中新添加而超类没有的方法了。)
在继承链中对象方法的调用存在一个优先级:this.show(O)、super.show(O)、this.show((super)O)、super.show((super)O)。
上面程序中的A,B,C,D存在如下关系:
分析4:
a2.show(b),a2是一个引用变量,类型为A,则this为a2,b是B的一个实例,于是它到类A里面找show(B obj)方法,没有找到,于是到A的super(超类)找,而A没有超类,因此转到第三优先级this.show((super)O),this仍然是a2,这里O为B,(super)O即(super)B即A,因此它到类A里面找show(A obj)的方法,类A有这个方法,但是由于a2引用的是类B的一个对象,B覆盖了A的show(A obj)方法,因此最终锁定到类B的show(A obj),输出为"B and A”。
分析5:
a2.show(c),a2是A类型的引用变量,所以this就代表了A,a2.show(c),它在A类中找发现没有找到,于是到A的超类中找(super),由于A没有超类(Object除外),所以跳到第三级,也就是this.show((super)O),C的超类有B、A,所以(super)O为B、A,this同样是A,这里在A中找到了show(A obj),同时由于a2是B类的一个引用且B类重写了show(A obj),因此最终会调用子类B类的show(A obj)方法,结果也就是B and A。
分析8:
b.show(c),b是一个引用变量,类型为B,则this为b,c是C的一个实例,于是它到类B找show(C obj)方法,没有找到,转而到B的超类A里面找,A里面也没有,因此也转到第三优先级this.show((super)O),this为b,O为C,(super)O即(super)C即B,因此它到B里面找show(B obj)方法,找到了,由于b引用的是类B的一个对象,因此直接锁定到类B的show(B obj),输出为"B and B”。
按照同样的方法我也可以确认其他的答案。
当超类对象引用变量引用子类对象时,被引用对象的类型而不是引用变量的类型决定了调用谁的成员方法,但是这个被调用的方法必须是在超类中定义过的,也就是说被子类覆盖的方法。这我们用一个例子来说明这句话所代表的含义:a2.show(b);
这里a2是引用变量,为A类型,它引用的是B对象,因此按照上面那句话的意思是说有B来决定调用谁的方法,所以a2.show(b)应该要调用B中的show(B obj),产生的结果应该是“B and B”,但是为什么会与前面的运行结果产生差异呢?这里我们忽略了后面那句话“被调用的方法必须是在超类中定义过的”,那么show(B obj)在A类中存在吗?根本就不存在!所以这句话在这里不适用?那么难道是这句话错误了?非也!其实这句话还隐含这这句话:它仍然要按照继承链中调用方法的优先级来确认。所以它才会在A类中找到show(A obj),同时由于B重写了该方法所以才会调用B类中的方法,否则就会调用A类中的方法。
说明:所有的面试题目都不是一成不变的,特别是像一线大厂,上面的面试题只是给大家一个借鉴作用,最主要的是给自己增加知识的储备,有备无患。最后给大家分享Spring系列的学习笔记和面试题,包含spring面试题、spring cloud面试题、spring boot面试题、spring教程笔记、spring boot教程笔记、最新阿里巴巴开发手册(63页PDF总结)、2022年Java面试手册。一共整理了1184页PDF文档。私信博主(777)领取,祝大家更上一层楼!!
原文作者:jianyuerensheng
原文出处:https://blog.csdn.net/jianyuerensheng/article/details/51602015

阅读更多 >>>  三七保存方法

网站数据信息

"什么是面向对象方法的封装性,OOP的三大特性是什么?"浏览人数已经达到21次,如你需要查询该站的相关权重信息,可以点击进入"Chinaz数据" 查询。更多网站价值评估因素如:什么是面向对象方法的封装性,OOP的三大特性是什么?的访问速度、搜索引擎收录以及索引量、用户体验等。 要评估一个站的价值,最主要还是需要根据您自身的需求,如网站IP、PV、跳出率等!