×

java面向对象三大特性 面向对象 java

java面向对象三大特性(java面向对象的三大特征)

admin admin 发表于2022-09-05 15:45:42 浏览113 评论0

抢沙发发表评论

本文目录

java面向对象的三大特征


面向对象三大特性
继承:一般类只能单继承,内部类实现多继承,接口可以多继承
封装:访问权限控制public 》 protected 》 包 》 private 内部类也是一种封装
多态:编译时多态,体现在向上转型和向下转型,通过引用类型判断调用哪个方法(静态分派)。
运行时多态,体现在同名函数通过不同参数实现多种方法(动态分派)。
希望对您有所帮助!~

java面向对象有哪三个特点啊“


1.抽象:抽象就是忽略一个主题中与当前目标无关的那些方面,以便更充分地注意与当前目标有关的方面。抽象并不打算了解全部问题,而只是选择其中的一部分,暂时不用部分细节。抽象包括两个方面,一是过程抽象,二是数据抽象。2.继承:继承是一种联结类的层次模型,并且允许和鼓励类的重用,它提供了一种明确表述共性的方法。对象的一个新类可以从现有的类中派生,这个过程称为类继承。新类继承了原始类的特性,新类称为原始类的派生类(子类),而原始类称为新类的基类(父类)。派生类可以从它的基类那里继承方法和实例变量,并且类可以修改或增加新的方法使之更适合特殊的需要。3.封装: 封装是把过程和数据包围起来,对数据的访问只能通过已定义的界面。面向对象计算始于这个基本概念,即现实世界可以被描绘成一系列完全自治、封装的对象,这些对象通过一个受保护的接口访问其他对象。

Java面向对象三大特征怎么样轻松理解`


封装:
首先,属性可用来描述同一类事物的特征, 行为可描述一类事物可做的操作,封装就是要把属于同一类事物的共性(包括属性与行为)归到一个类中,以方便使用.比如人这个东东,可用下面的方式封装:
人{
年龄(属性一)
身高(属性二)
性别(属性三)
做事(行为之一)
走路(行为之二)
说话(行为之三)
}
继承:
由于封装,使得有共同特征的一类事物的所有描述信息都被归于一类之中,但我们知道,这并不是万能的,有些事物有共性,但还存在区别,比如教师,简单封装起来如下:
教师{
年龄(属性一)
身高(属性二)
性别(属性三)
做事(行为之一)
走路(行为之二)
说话(行为之三)
教书(行为之四)
}
上面对“教师“的封装,与对“人“的封装基本上差不多,只是多了一个特征行为:教书,
教师有与人一样的共性, 但我们不能说“人教书“,也就是不能把教书封装到“人“之中去,教书是教师的特征行为之一. 为了省事地封装教师(代码的复用,这只是继承存在的原因之一), 可以让教师去继承人,如:
教师 extends 人{
教书(行为之三)
}
这样,我们就不用重新定义那些已经被“人“这一个类所封装的那些属性与行为了,而只需要使用继承的方式,在人的基础上拓展教师专有的行为,即“教书“即可把教师描述出来;这样的结果, 即是教师也同时拥有“人“之中所封装的一切属性与行为, 还拥有自己的特征行为“教书“.
多态:
多态的概念发展出来,是以封装和继承为基础的(其实我觉得抽象也应该算是面向对象的大特征之一,要封装,抽象是必须的)
简单的理解一下多态,比如:
人这个类,封装了很多人类共有的特性,
教师是人的子类,继承了人的属性与行为,当然教师有自己的特征行为,比如教书授课;
学生是人的子类,继承了人的属性与行为,当然学生有自己的特征行为,比如学习做作业;

现在,当我们需要去描述教师与学生各自的行为的时候, 我们可以分开来说“教师在授课“, “学生做作业“, 但如果我们要站在抽象的角度, 也就是从教师与学生的父类“人“的角度, 来同时描述他们各自的行为时,我们怎么描述?“人在授课“?“人在做作业“?这是不是怪怪的很不合适?不合适的问题就在于, 对于行为主体,我们使用了抽象层次的东东“人“,而对于行为本身, 我们却使用了具体的东东“授课“与“教书“. 怎么解决呢? 那就需要解决抽象与具体的矛盾问题.
既然是站在抽象在角度来描述,那我们把行为抽象一下,不就能同时描述了吗?比如“人在做事“(教师授课与学生做作业都可以说成人在做事),这样就解决了抽象层次与具体层次之间的矛盾.
到了这一步, 我们可以把两个描述: “教师在做事“, “学生在做事“ 两者统一为“人在做事“,
然后, 我们可以在“教师“的“做事“行为中去调用教师自己的特征行为“授课“,
在“学生“的“做事“行为中去调用学生自己的特征行为“做作业“,
所以,当调用“人“去“做事“的时候,如果这个人是教师,那他所做的事实际上就是“教书“,
如果这个人是学生,那他所做的事实际上就是“做作业“.
也就是说在这里“人“是多态的, 在不同的形态时,特征行为是不一样的, 这里的“人“, 同时有两种形态,一种是教师形态,一种是学生形态,所对应的特征行为分别是“授课“与“做作业“.
完成上述的描述过程, 其实就是多态机制的体现.
多态, 就是站在抽象的层面上去实施一个统一的行为,到个体(具体)的层面上时, 这个统一的行为会因为个体(具体)的形态特征而实施自己的特征行为.
多态比起封装与继承来说要复杂很多, 上面的描述很简单, 不用去死抠多态两个字,
其实只要明白:
能站在抽象的角度去描述一件事,
而针对这件抽象的事, 对于每个个体(具体)又能找到其自身的行为去执行, 这就是多态.
-面向对象

谈谈你对面向对象的理解


浅谈对面向对象的理解
为什么要使用面向对象的思想来看待问题?
1.面向对象更利于我们看待问题,它使得我们看待问题变得清晰化。对于问题我们只需要了解问题所牵扯到的对象有哪些,它们在这个问题中都有着哪些行为即可。
2.面向对象最大的改变应该是我们看待问题高度发生改变。在利用面向过程的思想看待问题时只是关注程序的变量,语句,表达式的合理性,关注代码块的功能。而利用面向对象的思想进行设计时,我们只需关注对象与对象之间关系。而具体的实现细节是由对象的方法来实现的。但并不是说面向过程就一无是处,对于对象里的方法还是要利用面向过程的思想的。
面向对象的特性
继承是面向对象编程思想中重要的一部分。简单的讲就是从一个已有的类中派生出新的类。来实现一些父类没有的功能。父类允许子类继承它的方法,如果父类中有些方法和子类中的方法发生冲突,子类可以重写该方法。子类也可以实现父类的所有功能。对于基类的设计过程,我们应该根据实际情况包含各种可能性。比如说有一个狗的类,任何一个品种的狗都可以继承它,去实现自己细节。但如果要实现猫的行为方式,显然狗这个类就不适合了,应该在往上走,去实现一个动物的类,就可以继承这个类来实现猫的行为属性。这样做的目的是使程序具有较高的可扩展性。继承的优点是,提高代码的复用性,降低工作量。缺点是,如果父类的大部分功能子类都用不上,那么子类就显得比较冗余了。
面向过程的实现过程就是变量在函数之间的不断传递,使得函数之间进行信息的交流来实现编程的需要的。这样的后果就是如果变量在某一函数中被改变了,会导致整个程序出错。对于面向对象来说,信息之间的交流是以对象做为参数的,调用的类只能使用该类的某些功能来实现自己的功能。里面的信息对外界来说是不可见的,也无法改变类中的属性。因为类中的属性大多都是私有的或保护的。这就体现了封装性,封装是将属性和方法“打包”,属性私有化或保护化,方法公有化,只能使用该类的方法来使用和改变该类的属性。就好像人一样,比如吃饭是一个方法,那么吃多吃少是自己的事,与别人无关。别人也不可能改变这个事实。
对于面向对象来说,类相当于一个模板,一个抽象的概念,对象才是类的实例化体现,即是程序代码的组成部分。对于继承了父类的多个子类而言,重写了父类的某些方法,方法名虽然相同,方法体不同,实现过程不同,即不同子类的该方法不同。使用父类类型定义的子类对象。调用不同子类的方法,产生的了不同结果,这种变化就叫多态性。尤其对于父类是抽象类来说,由于父类中的方法未定义,不同子类继承父类后,可以重写父类的方法。抽象类不能实例化对象,只能被继承,一般作为基类。
面相对象的原则
一.单一原则
就一个类来说,类的功能应该较为单一一点,不应该是各种功能都包含在一起,这样不利于代码的维护,容易产生BUG,也破坏了类的本质。应该是类中的所有方法都为某一功能服务。但并不是类分的越详细越好,根据实际情况而定。
二.开闭原则
对于一个类来说,应该是扩展是开放的,修改是关闭的。随着人们的对软件功能的不断期待和改变,我们总是避免不了的要在原有的代码的基础上进行变化,但我们不可能对原有的代码进行修改,因为这可能使原有出现BUG,所以扩展是理所当然的。这个就要通过继承来实现了。
三.迪米特原则
一个类应该降低对其它类的耦合度,如果避免不了要与其它类产生关联的话,应该避免对其它类的了解。保持类的封装性特点。如果两个类之间耦合度较高的话,一个类的改变会影响另一个类,而面向对象的原则是程序之间的类应该是很少关联的各个类执行自己的功能就好。
对象之间的关系
泛化关系是对象之间耦合度最大的一种关系,就是继承关系。在JAVA中接口就类似于抽象类,它是方法说明的集合,子类继承接口,并实现接口中的方法,就是实现关系。在程序中,有时候避免不了的要把某一个对象做为参数,局部变量,返回值,让另一个对象调用完成该类的某些功能。这就是依赖关系。聚合关系是整体包含局部的概念。例如班级与学生之间的关系。组合关系是一种强烈的包含关系。例如学校和班级之间的关系,公司和部门之间的关系。聚合关系和组合关系的区别就在于,聚合关系中的的局部可以独立存在,例如这个班级被取消了,不能说明班里的学生就不是学生了。组合关系而言,整体的生命周期和局部的生命周期是息息相关的,如果整体不存在了,局部肯定不存在了,例如公司倒闭了,那么它其中的某一个部门肯定也不会存在。
总结
所谓面向对象编写的程序,就是通过不同对象的实现来实现整个功能。重点还是如何合理的设置对象,以及对程序的包容性,即你要考虑将来可能会改变某一功能或添加某一功能。对程序的升级。还有就是在满足程序功能的前提下保持低耦合度。
-java

Java 面向对象的三大性质是什么


三大特征吧, 封装, 继承, 多态, 这个就是面向对象的特征.
初学者比较难理解, 什么是对象, 什么是封装, 什么叫多态, 不过初学者也不必要一开始就去研究这种理论上的东西, 应该多写代码, 多做项目, 会在实践中慢慢会领悟
-面向对象

面向对象方法的要点有哪些


面向对象的主线:

Java类及类的成员:属性、方法、构造器(高频);代码块、内部类(低频) (类是由对象派生的)

面向对象的三大特征:封装(Encapsulation)、继承(Inheritance)、多态(Polymorphism)、(抽象性)

其它关键字:this、super、static、final、abstract、interface、package、import等

    面向过程(ProcedureOrientedProgramming)与面向对象(ObjectOriented Programming)的理解

    二者都是一种思想,

    面向对象是相对于面向过程而言的。
    面向过程,强调的是功能行为,以函数为最小单位,考虑怎么做。

    面向对象,将功能封装进对象,强调具备了功能的对象,以类/对象为最小单位,考虑谁来做。而且更加强调运用人类在日常的思维逻辑中采用的思想方法与原则,如抽象、分类、继承、聚合、多态等。

    1.面向过程:强调的是功能行为,以函数为最小单位,考虑怎么做。
    2.面向对象:强调具备功能得对象,以类/对象为最小单位,考虑谁来做。

    1.面向过程:强调的是功能行为,以函数为最小单位,考虑怎么做。

    2.面向对象:强调具备了功能的对象,以类/对象为最小单位,考虑谁来做。

    面向对象的思想概述

    类(Class)和对象(Object)是面向对象的核心概念。
    类是对一类事物的描述,是抽象的、概念上的定义
    对象是实际存在的该类事物的每个个体,因而也称为实例(instance)。

    程序员从面向过程的执行者转化成了面向对象的指挥者
    面向对象分析方法分析问题的思路和步骤:

    根据问题需要,选择问题所针对的现实世界中的实体。

    从实体中寻找解决问题相关的属性和功能,这些属性和功能就形成了概念世界中的类。

    把抽象的实体用计算机语言进行描述,形成计算机世界中类的定义。即借助某种程序语言,把类构造成计算机能够识别和处理的数据结构。

    将类实例化成计算机世界中的对象。对象是计算机世界中解决问题的最终工具。

    面向对象的两个要素:类和对象类 :对一类事物的描述,是抽象的、概念上的定义

    对象:是实际存在的该类事物的每个个体(实实在在的个体),因而也称为实例(instance)。
    以人为例子: 类 = 抽象概念的人 ; 对象 = 实实在在的某个人-java

    面向对象程序设计的重点是类的设计

    设计类,就是设计类的成员。

    二者关系:对象是由类派生(new)出来的、对象是类的实例化

    类的结构:属性和方法

    现实世界的生物体,大到鲸鱼,小到蚂蚁,都是由最基本的细胞构成的。
    同理,Java代码世界是由诸多个不同功能的类构成的。
    现实生物世界中的细胞又是由什么构成的呢?细胞核、细胞质、…那么,Java中用类class来描述事物也是如此。常见的类的成员有:
    属性:对应类中的成员变量
    行为:对应类中的成员方法-面向对象

    类和对象的创建和执行操作有那三步(落地实现的规则)?

    ①创建类,设计类的成员
    ②类的实例化(创建类的对象)
    ③通过“对象.属性”或 “对象.方法”调用对象的结构

    几个常用的概念

    属性= 成员变量 = Field = 域、字段

    方法= 成员方法 = Method =函数

    创建类的对象 = 类的实例化 = 实例化类


面向对象的三大特征在java中的体现


一、封装

首先,属性能够描述事物的特征,方法能够描述事物的动作。封装就是把同一类事物的共性(包括属性和方法)归到同一类中,方便使用。

封装:封装也称信息隐藏,是指利用抽象数据类型把数据和基于数据的操作封装起来,使其成为一个不可分割的整体,数据隐藏在抽象数据内部,尽可能的隐藏数据细节,只保留一些接口使其与外界发生联系。也就是说用户无需知道内部的数据和方法的具体实现细节,只需根据留在外部的接口进行操作就行。-java

为了实现良好的封装,我们通常将类的成员变量声明为private,在通过public方法来对这个变量来访问。对一个变量的操作,一般有读取和赋值2个操作,,我们分别定义2个方法来实现这2个操作,一个是getXX(XX表示要访问的成员变量的名字)用来读取这个成员变量,另一个是setXX()用来对这个变量赋值。-面向对象

二、继承

1. Java继承

Java继承是面向对象的最显著的一个特征。继承是从已有的类中派生出新的类,新的类能吸收已有类的数据属性和行为,并能扩展新的能力。JAVA不支持多继承,单继承使JAVA的继承关系很简单,一个类只能有一个父类,易于管理程序,父类是子类的一般化,子类是父类的特化(具体化)-java

继承所表达的就是一种对象类之间的相交关系,它使得某类对象可以继承另外一类对象的数据成员和成员方法。若类B继承类A,则属于B的对象便具有类A的全部或部分性质(数据属性)和功能(操作),我们称被继承的类A为基类、父类或超类,而称继承类B为A的派生类或子类。-面向对象

继承避免了对一般类和特殊类之间共同特征进行的重复描述。同时,通过继承可以清晰地表达每一项共同特征所适应的概念范围——在一般类中定义的属性和操作适应于这个类本身以及它以下的每一层特殊类的全部对象。运用继承原则使得系统模型比较简练也比较清晰。-java

三、多态

方法的重写、重载与动态连接构成多态性; Java之所以引入多态的概念,原因之一是它在类的继承问题上和C++不同,后者允许多继承,这确实给其带来的非常强大的功能,但是复杂的继承关系也给C++开发者带来了更大的麻烦。-面向对象

为了规避风险,Java只允许单继承,派生类与基类间有IS-A的关系(即“猫”is a “动物”)。这样做虽然保证了继承关系的简单明了,但是势必在功能上有很大的限制,所以,Java引入了多态性的概念以弥补这点的不足,此外,抽象类和接口也是解决单继承规定限制的重要手段。同时,多态也是面向对象编程的精髓所在。 -java

要理解多态性,首先要知道什么是“向上转型”。 

我定义了一个子类Cat,它继承了Animal类,那么后者就是前者的父类。我可以通过

Cat c = new Cat();   例化一个Cat的对象,这个不难理解。

但当我这样定义时: Animal a = new Cat();

父类引用只能调用父类中存在的方法和属性,不能调用子类的扩展部分;因为父类引用指向的是堆中子类对象继承的父类;(但是如果强制把超类转换成子类的话,就可以调用子类中新添加而超类没有的方法了。) 

同时,父类中的一个方法只有在父类中定义而在子类中没有重写的情况下,才可以被父类类型的引用调用; 

对于父类中定义的方法,如果子类中重写了该方法,那么父类类型的引用将会调用子类中的这个方法,这就是动态连接。


java面试题 面向对象三大特征的理解


面向对象技术是目前流行的系统设计开发技术,它包括面向对象分析和面向对象程序设计。面向对象程序设计技术的提出,主要是为了解决传统程序设计方法——结构化程序设计所不能解决的代码重用问题。
  面向对象的编程方法具有四个基本特征:
1.抽象:
  抽象就是忽略一个主题中与当前目标无关的那些方面,以便更充分地注意与当前目标有关的方面。抽象并不打算了解全部问题,而只是选择其中的一部分,暂时不用部分细节。比如,我们要设计一个学生成绩管理系统,考察学生这个对象时,我们只关心他的班级、学号、成绩等,而不用去关心他的身高、体重这些信息。抽象包括两个方面,一是过程抽象,二是数据抽象。过程抽象是指任何一个明确定义功能的操作都可被使用者看作单个的实体看待,尽管这个操作实际上可能由一系列更低级的操作来完成。数据抽象定义了数据类型和施加于该类型对象上的操作,并限定了对象的值只能通过使用这些操作修改和观察。
2.继承:  继承是一种联结类的层次模型,并且允许和鼓励类的重用,它提供了一种明确表述共性的方法。对象的一个新类可以从现有的类中派生,这个过程称为类继承。新类继承了原始类的特性,新类称为原始类的派生类(子类),而原始类称为新类的基类(父类)。派生类可以从它的基类那里继承方法和实例变量,并且类可以修改或增加新的方法使之更适合特殊的需要。这也体现了大自然中一般与特殊的关系。继承性很好的解决了软件的可重用性问题。比如说,所有的Windows应用程序都有一个窗口,它们可以看作都是从一个窗口类派生出来的。但是有的应用程序用于文字处理,有的应用程序用于绘图,这是由于派生出了不同的子类,各个子类添加了不同的特性。
3.封装:
  封装是面向对象的特征之一,是对象和类概念的主要特性。封装是把过程和数据包围起来,对数据的访问只能通过已定义的界面。面向对象计算始于这个基本概念,即现实世界可以被描绘成一系列完全自治、封装的对象,这些对象通过一个受保护的接口访问其他对象。一旦定义了一个对象的特性,则有必要决定这些特性的可见性,即哪些特性对外部世界是可见的,哪些特性用于表示内部状态。在这个阶段定义对象的接口。通常,应禁止直接访问一个对象的实际表示,而应通过操作接口访问对象,这称为信息隐藏。事实上,信息隐藏是用户对封装性的认识,封装则为信息隐藏提供支持。封装保证了模块具有较好的独立性,使得程序维护修改较为容易。对应用程序的修改仅限于类的内部,因而可以将应用程序修改带来的影响减少到最低限度。
4. 多态性:
  多态性是指允许不同类的对象对同一消息作出响应。比如同样的加法,把两个时间加在一起和把两个整数加在一起肯定完全不同。又比如,同样的选择编辑-粘贴操作,在字处理程序和绘图程序中有不同的效果。多态性包括参数化多态性和包含多态性。多态性语言具有灵活、抽象、行为共享、代码共享的优势,很好的解决了应用程序函数同名问题。
面向对象程序设计具有许多优点:
1、开发时间短,效率高,可靠性高,所开发的程序更强壮。由于面向对象编程的可重用性,可以在应用程序中大量采用成熟的类库,从而缩短了开发时间。
2、应用程序更易于维护、更新和升级。继承和封装使得应用程序的修改带来的影响更加局部化。
-面向对象

java面向对象的三要素是什么


java中的面向对象的三大基本特征,不是三要素:【封装】、【继承】、【多态】
一、封装
对象要有一个明确的边界;边界的划分(对象各司其职、对象的粒度、对象的可重用性)
具体来说:
1.属性: 私有 private(提供set和get方法)
2.方法: 公开或私有public/private
3.方法声明 --》 公开
方法实现 --》 隐藏
实现改变时,对对象的使用者没有影响。
二、继承
共性放到父类,特性放到子类;子类,父类 --》 其实就是特殊 --》 一般
1.关键字: extends 例如:Dog extends Animal{}
2.java中一个类最多只能有一个直接的父类,即单继承(具有简单性、树形结构),
C++中是单继承
java中要实现多继承,通过接口来实现。
3.父类中所有属性和方法都能继承给子类;父类中的私有方法不能继承给子类。
4.java中的访问修饰符
访问修饰符
访问权限
继承 
private 本类内部 不能继承
default 本类+同包 同包子类可以继承
protected 本类+同包+不同子包 可以继承
public 公开 可以继承
5.构造对象过程
(1)分配空间
(2)递归地构造父类对象
a. 父类 初始化属性
b. 父类 构造方法
(3)初始化属性
(4)调用构造方法
6.super
用法:
super() 调用父类的构造方法,只能出现在构造方法的第一行
super.方法名 super表示父类的对象,通过它去调用父类的方法
注意:在写类的时候,一定要写默认无参的构造方法,如果一个构造方法的
第一句既不是this(),也不是super()时,那么就会在这里隐含的调用
他的父类的无参的构造方法,即隐含的有super()。
三、多态
运行时多态。
子类的对象放在父类的引用中,例如 Animal a=new Dog,子类对象当父类对象来使用。
1.多态原则:
(1)对象类型不变
(2)只能用引用调用其引用类型中定义的方法
(3)运行时,根据对象的实际类型去找子类覆盖之后的方法
例子:
有Animal类中有eat()和sleep()两个方法,sleep()中睡8小时;子类Dog中有
eat()方法,sleep()方法中睡6小时,还有wangwang()方法。
现创建Animal a=new Dog(); 不能调用a.wangwang(),调用a.sleep()输出睡6小时。
2.对象的强制转换
格式: 引用 instanceof 类型
引用所指的对象是否与类相符,返回值boolean值。
用法:
Animal a=new Cat();
if(a instanceof Dog)
{
Dog d=(Dog)a;
d.wangwang();
}
说明:如果只有Dog d=(Dog)a;运行时错误,因为a是Cat而不是Dog (多态原则第一条)
3.多态的灵活变换
(1)用于参数列表上:
public void m(A a){} 可以用A类的任何子类对象作为参数
(2)用在返回值上:
public A m(){} 这个方法可能返回A类的任何子类对象
-java

面向对象语言的三个基本特征各自特点及优势


面向对象语言的三个基本特征:识认性、类别性、多态性;优势:继承性,在基本层次关系的不同类中共享数据和操作。


识认性,系统中的基本构件可识认为一组可识别的离散对象;类别性,系统具有相同数据结构与行为的所有对象可组成一类;多态性,对象具有唯一的静态类型和多个可能的动态类型。

较典型的面向对象语言有:

simula 67,支持单继承和一定含义的多态和部分动态绑定;Smalltalk支持单继承、多态和动态绑定;EIFFEL,支持多继承、多态和动态绑定。

C++,支持多继承、多态和部分动态绑定。Java,支持单继承、多态和部分动态绑定。五种语言涉及概念的含义虽然基本相同,但所用术语有别。

扩展资料

传统的基于类的面向对象语言的一个主要特点就是inheritance,subclassing和subtyping之间的密不可分的联系。很多的面向对象语言的语法,概念,就是从这三者而来的。

比如说,通过subclassing,可以继承父类的一些方法,而同时又可以在子类中改写父类的方法。这个改写过的方法,通过subtyping、subsumption,又可以从一个类型是父类的对象去调用。

但是,inheritance、subclassing、subtyping这三者并不是永远和睦相处的。在一些场合,这三者之间的纠缠不清会妨碍到通过继承或泛型得到的代码重用。

因此,人们开始注意到把这三者分离开来的可能性。区分subclassing和subtyping已经很常见了。而其它的一些方法还处于研究的阶段。