小白&JAP君|面向对象的三大特征你真的了解了吗?
- 2019 年 10 月 4 日
- 笔记
1
说在前面的话
面向对象编程是如今最流行的编程思想,像JAVA,Python,C++…都是属于面向对象编程,今天给大家说说面向对象编程的三大特性,深刻理解这三大特性会帮助你迅速的掌握面向对象的编程语言!
2
三大特性
JAP君,三大特性到底是哪几个?
面向对象的三大特性是继承,封装,多态。
它们是什么意思呢?这三大特性到底有什么特点呢?
继承:在我们面向对象编程语言中有子类和父类,其实就是我们人与人之间的关系一样,你爸爸生了你,你肯定会有你爸爸的遗传,但是你除了这些遗传,你自己可能也会有自己的特长。在面向对象里也是一样,子类继承于父类的方法和属性,子类也可以拓展自己的方法和属性
封装:举个简单的例子,我们看电视只要打开开关即可,不需要把电视给拆了,看内部结构吧。封装一个道理,我们需要去使用某种东西,但是我们不把内部结构给显示出来,只是给使用者一个接口(此处接口就类似于电视机开关)。官方一点讲封装就是对外公开一些属性和方法,对外隐藏一些属性和方法。
多态:官方一点就是,具有父子类关系的一个方法的多种实现。
如果你对上面三种有点模糊,可以去看我写的《到底啥是面向对象?啥是封装、继承、多态?》,文章里面很形象的讲解了这些知识!
哦哦,貌似有点理解了…但是JAP君,你能单独给我讲讲这三个特性吗?顺便可以拓展一下其他相关的知识!
当然可以,首先我们来讲下继承吧。首先我们来搞懂类,类到底是什么?类是对“对象”的抽象,继承是对一批类的抽象。我们实现继承是通过“extends”关键字来实现。
比如我有两个类:Animal和Dog,狗是属于Animal的,我想继承于Animal,就直接:
public class Dog extends Animal
这样就实现了继承。当我们实现继承之后,我们就可以在Dog里面实现Animal中的方法和属性了,你可以自己去操作一下。
JAP君停一下,这个public是什么东西?这是固定的吗?
我直接给你看一张图吧

你所说的public,其实就是权限修饰符,也就是说你编写了一个类或者方法或者属性,你需要给它一定的权限才行,上表中就是所有的权限修饰符,其中default是默认修饰符(就是当你什么也没加的时候)。
从上表可以看出private的权限最小,如果我们写了一个属性并且用private修饰,那么这个属性只能在这个类中使用了,同理我们可以看出public的权限是最大的,任何地方我们都能够访问到。
哦哦,我懂了,那继承里面有没有一些需要注意的地方?
当然有,①例如在JAVA中,只能存在单继承(一个子类只能继承一个父类),但是在c++里面,可以存在多继承(一个子类继承多个父类),多继承当然是不好的,很容易导致关系的混乱,就好比你有很多的母亲,这样肯定是很乱的,所以也不怎么推崇多继承。② 子类继承父类的成员变量和成员方法,但不继承父类的构造方法
好的,已经记下笔记啦!
我们再来说下封装这个概念吧,在上面我给大家打了一个很好的比喻来讲解了为什么需要封装,更加规范一点讲就是 隐藏对象内部的复杂性,只对外公开简单的接口。便于外界调用,从而提高系统的可扩展性、可维护性。
//创建一个Animal类 public class Animal { //定义动物的姓名 private String name; //定义动物大小 private String size; //提供对外的接口 public String getName() { return name; } //提供对外的接口 public void setName(String name) { this.name = name; } //提供对外的接口 public String getSize() { return size; } //提供对外的接口 public void setSize(String size) { this.size = size; } }
上面就是一个封装的简单实例,我们把 name和size设置为private,然后提供set,get方法(权限为public),这几个方法就是对外的接口
原来如此!其实就是不让别人直接访问这个类的属性或者方法,而是通过一个方法来访问!
对的,自己多动手写一些。我们接下来说一下多态吧。先给大家一张我从网上找的图片。

可以看出,其实就是一个东西,他可能有不同的实现方法。
那什么时候可以用多态呢?
多态的存在必须具备3个必要条件:要有继承,要有方法的重写,父类的的引用指向子类对象
噢噢,能不能用代码实现一下多态?我好像还有点懵。
行,你仔细看下下面的代码,
public class Animal { String str; public void voice(){ System.out.println("普通动物叫声!"); } } class Cat extends Animal { public void voice(){ System.out.println("喵喵喵"); } public void catchMouse(){ System.out.println("抓老鼠"); } } }
我们去调用一下:
class test { public static void main(String[] args){ Animal cat = new Cat(); cat.voice(); } }
看看输出结果是什么?
喵喵喵
可以看出,我们重写了父类的voice方法,并且调用他返回的结果是子类中的数据,这就现实了多态!咱们今天就讲到这吧,不懂的可以在公众号后台留言。
souga,非常谢谢JAP君!
3
结尾
文章若有错误,请到公众号后台留言指出。JAVA基础和web相关的知识这段时间会进行更新,我打算从0基础的地方写起,希望大家持续关注!