前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >小白&JAP君|面向对象的三大特征你真的了解了吗?

小白&JAP君|面向对象的三大特征你真的了解了吗?

作者头像
Python进击者
发布2019-09-17 15:33:18
3550
发布2019-09-17 15:33:18
举报
文章被收录于专栏:JAVAandPython君JAVAandPython君

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++里面,可以存在多继承(一个子类继承多个父类),多继承当然是不好的,很容易导致关系的混乱,就好比你有很多的母亲,这样肯定是很乱的,所以也不怎么推崇多继承。② 子类继承父类的成员变量和成员方法,但不继承父类的构造方法

好的,已经记下笔记啦!

我们再来说下封装这个概念吧,在上面我给大家打了一个很好的比喻来讲解了为什么需要封装,更加规范一点讲就是 隐藏对象内部的复杂性,只对外公开简单的接口。便于外界调用,从而提高系统的可扩展性、可维护性。

代码语言:javascript
复制
//创建一个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个必要条件:要有继承,要有方法的重写,父类的的引用指向子类对象

噢噢,能不能用代码实现一下多态?我好像还有点懵。

行,你仔细看下下面的代码,

代码语言:javascript
复制
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("抓老鼠");
}
}
}

我们去调用一下:

代码语言:javascript
复制
class test {
    public static void main(String[] args){
        Animal cat = new Cat();
        cat.voice();
    }
}

看看输出结果是什么?

代码语言:javascript
复制
喵喵喵

可以看出,我们重写了父类的voice方法,并且调用他返回的结果是子类中的数据,这就现实了多态!咱们今天就讲到这吧,不懂的可以在公众号后台留言。

souga,非常谢谢JAP君!

3

结尾

文章若有错误,请到公众号后台留言指出。JAVA基础和web相关的知识这段时间会进行更新,我打算从0基础的地方写起,希望大家持续关注!

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-03-01,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Python进击者 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档