Java面向对象的四大特征
前言
Java做为一门“全面”面向对象的编程语言,提供了面向对象的四种基本性质:抽象性、封装性、继承性和多态性。面向对象主要有四大特性:封装、抽象、继承和多态。
一、抽象 抽象就是将一类实体的共同特性抽象出来,封装在一个新的概念(类) 中,所以抽象是面向对象语言的基础。比如鸟就是一个对象,但是我们在研究这个对象的时候把它的一些同类放到一起,一起来考虑,而且抽象的时候,只考虑我们感兴趣的一些数据;假设你自己是一个普通人,那么你可能关心的数据是,鸟类飞行的方法,鸟类吃东西的方法;假设你自己是一个生物专家,那么你可能关心的数据时,鸟类的体重,鸟类的爪子的大小,鸟类的食量等等。 我们可以通过抽象处理复杂性。例如,人们不会把一辆汽车想象成由几万个互相独立的部分所组成的一套装置,而是把汽车想成一个具有自己独特行为的对象。这种抽象使人们可以很容易地将一辆汽车开到杂货店,而不会因组成汽车各部分零件过于复杂而不知所措。他们可以忽略引擎、传动及刹车系统的工作细节,将汽车作为一个整体来加以利用。
二、封装 在面向对象语言中,封装特性是由类来体现的。我们将现实生活中的一类实体定义成类,其中包括属性和行为(在Java中就是方法),就好像人类,可以具有name,gender,age等属性,同时也具有eat(,sleep(,我们在行为中实现一定的功能,也可操作属性,这是面向对象的封装特性; 封装是将代码及其处理的数据绑定在一起的一种编程机制,该机制保证了程序和数据都不受外部干扰且不被误用。可以理解为把它想成一个黑匣子,它可以阻止在外部定义的代码随意访问内部代码和数据。对黑匣子内代码和数据的访问通过一个适当定义的接口严格控制。 封装的步骤: 1、修改属性的可见性来限制对属性的访问 2、为每个属性创建赋值和取值的方法,用于对这些属性的访问 3、在赋值和取值的方法中,加入对属性的存储限制 封装的好处: 1、实现了专业的分工 2、类内部的结构能够自由修改 3、能够对成员进行更精确的控制 4、隐藏信息,实现细节 5、良好的封装能够减少耦合
三、继承 继承就像是我们现实生活中的父子关系,儿子可以遗传父亲的一些特性,在面向对象语言中,就是一个类可以继承另一个类的一些特性,从而可以代码重用,其实继承体现的是is-a关系,父类和子类在本质上还是一类实体。 继承是一个对象获得另一个对象的属性的过程。继承很重要,因为它支持了按层分类的概念。比如:藏獒是狗类的一部java面向对象的特征有哪些方面
分,狗类又是哺乳动物的一部分,哺乳动物又是动物类的一部分。如果不使用层级的概念,我们就不得不分别定义每个动物的所有属性。而使用了继承,一个对象就只需要定义是它在所属类中独一无二的属性即可,因为它可以从它的父类那儿继承所有的通用属性。可以这样说,正是继承机制使一个对象成为一个更具通用类的一个特定实例成为可能。 继承的特征: 1、可传递可扩展。若类C继承类B,类B继承类A(多继承),则类C既有从类B那里继承下来的属性与方法,也有从类A那里继承下来的属性与方法,还可以有自己新定义的属性和方法。继承来的属性和方法尽管是隐式的,但仍是类C的属性和方法。 2、可复用。若类B继承类A,那么建立类B时只需要再描述与基类(类A)不同的少量特征(数据成员和成员方法)即可。这种做法能减小代码和数据的冗余度,大大增加程序的重用性。 3、可维护性。继承通过增强一致性来减少模块间的接口和界面,大大增加了程序的易维护性。
四、多态 多态是允许一个接口被多个同类动作使用的特性,具体使用哪个动作与应用场合有关。多态就是通过传递给父类对象引用不同的子类对象从而表现出不同的行为,多态可为程序提供更好的可扩展性,同样也可以代码重用。 要理解多态性,首先要知道什么是“向上转型”。 我定义了一个子类Dog,它继承了Animal类,那么后者就是前者的父类。
可以通过: Dog d = new Dog(; 例化一个Dog对象。 但当我这样定义时: Animal a = new Dog(; 它表示我定义了一个Animal类型的引用,指向新建的Dog类型的对象。由于Dog是继承自它的父类Animal,所以Animal类型的引用是可以指向Dog类型的对象的。那么这样做有什么意义呢?因为子类是对父类的一个改进和扩充,所以一般子类在功能上较父类更强大,属性较父类更独特,定义一个父类类型的引用指向一个子类的对象既可以使用子类强大的功能,又可以抽取父类的共性。所以, 父类引用只能调用父类中存在的方法和属性,不能调用子类的扩展部分;因为父类引用指向的是堆中子类对象继承的父类;(但是如果强制把超类转换成子类的话,就可以调用子类中新添加而超类没有的方法了。) 同时,父类中的一个方法只有在父类中定义而在子类中没有重写的情况下,才可以被父类类型的引用调用; 对于父类中定义的方法,如果子类中重写了该方法,那么父类类型的引用将会调用子类中的这个方法,这就是动态连接。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论