您的位置:首页 > 其它

面向对象三大特征——封装、继承、多态

2019-01-27 21:16 211 查看

封装、继承、多态是我们Java程序员从开始学习Java就会经常听到的三个词,这是Java的三大特征,无论从哪一点开始谈起,都会牵扯到很多的知识点,可以说是Java非常经典的一种思想

1、封装

封装,顾名思义就是将一部分内容包装起来。试想一下,我们平时为什么要把一件或者多个东西包装起来呢,一个原因可能是为了方便的拿和放,另一个原因是我们不希望被别人看到里面的内容。那么同样的,对于Java中的封装来说,一个目的是为了不让外部随意调用,更改受保护内容,隐藏具体实现。其次就是为了减少代码的复杂度,提高代码的重用能力,便于修改和维护。
就像一台电视机,我们往往看到的是一个工厂组装完整的电视,实际上电视内部的构造我们根本看不到,也不知道到底是如何实现播放视频的效果。而对于工厂来说,他们需要做的就是把一堆堆零件组装起来,变成我们看到的“电视”。而我们不需要知道这个过程,我们只在乎结果,那么这个组装的过程就是封装。从一定程度也组织了我们随意更改内部构造。这就是封装的一个小例子
介绍完封装,那么就要知道如何封装。对于封装主要有两点内容,一个是四种修饰符:public默认protectedprivate他们的总用空间从大到小排列。可以使用这四个修饰符来限制类、成员、方法的作用域,从而达到一种封装的效果。其中:
public:表示公开,即哪里都可以访问的到
protected:表示受保护的,在直接子类中可以随意访问
默认:即不写修饰符,访问范围就在本包内
private:表示私有的,只能在本类、内部类中访问
对于变量的限制,除了上述的四个访问修饰符意外,Java中还有gettersetter方法让我们专门对属性变量加以限制。一般用于private修饰的属性,setter方法用于给属性赋值,getter方法用于获取到属性

2、继承

说完了封装,那么下一个要进行探讨和学习的就是继承了。所谓继承,在现实世界中一般指的是继承事业和财产,多半都是获得上一代留下的东西,那么自然这些东西也就可以自己使用了。在Java中,当一个子类继承自一个父类时,会继承到父类中的非private修饰的其他属性和方法(因为即使是亲生自己的父亲,也会有一些东西不能遗留给你的)。
继承的关键字是extends,通常结构为:class 子类 extends 父类{}。继承并非只是发生在类与类之间,接口与接口之间也存在继承关系。其中类与类之间的继承是单继承,这一点很好理解,因为一个孩子只会有一个亲生父亲嘛。而接口与接口之间可以是多继承,就像你可以用好几个插板串联成一个很长的电源线。
值得注意的是,继承关系中。子类在创建父类时,调用子类的构造方法之前,会去优先访问父类的无参构造。这是因为在子类的构造方法中,有一句隐藏的super()语句,如果父类中没有无参构造,那么需要在写的时候首先先使用super(),语句来调用父类的有参构造,如图所示:

这里正常的构造会报错,按照系统提示的改正方法,会产生这样的构造方法:
相信大家也都看到了,已经生成的构造方法里面有句参并调用父类构造的super(name)方法了吧,虽然平时的构造方法里面甚都没有,但其实还是有一句隐藏的super语句,平时需要注意!!

3、多态

看完了封装和继承,剩下的就是多态了。可以说之前对于封装和继承的学习和理解程度,从一定程度上决定了多态的学习能力。多态可以通常理解为是多种形态。就像水一样,有气、液、固三种形态。发生在继承或实现关系中,并且有方法重写的情况下。

多态的出现可以说实现了Java绝大多数的功能,多态的语法点并不多,但是却极其重要。通常表现为两种方式,一种是父类的引用指向子类的对象,即向下转型;另一种是子类的引用指向父类的对象,即向上转型,不过这个转型需要强制类型转换。
向下转型:


向上转型:

其实也很好理解,儿子可以自然而然的长大变成一位父亲,但是父亲不能随着年龄的增长变回一个孩子。

值得的提到的有instanceof这个关键字,一般不清数该引用时什么类型的时候进行判断,其作用是用来判断instanceof左边的应用是否是右边的实例的。其实也可以通俗的理解为看右边是否可以存储左边的数据。
多态的作用可以总结为两点:

同的引用指向不同的对象是会有不同的功能

相同的对象造型成不同的类型是会有不同的实现

以上就是我对面向对象三大特征的一个简单的概述,欢迎指正与补充。

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: