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

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

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基础的地方写起,希望大家持续关注!

本文分享自微信公众号 - JAVAandPython君(JAVAandPythonJun),作者:JAP君

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-03-01

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 我用Flask写了一个图书作者管理项目(附完整代码)

    这次给大家带来的是一个非常小的Flask案例,刚好也与我们之前学习的Flask知识紧紧相结合。

    Python进击者
  • C 语言荣获 2019 年度最佳编程语言称号

    每个人都以为,Python 将会连续第二次获得 TIOBE 的年度编程语言的称号。但这一次偏偏是优秀的老牌编程语言 C ,它凭藉 2.4% 的年增长率荣登榜首获...

    Python进击者
  • 手把手教你在centos上安装MySQL(避坑必备)

    在上篇文章中手把手教你在centos上配置Django项目(超详细步骤) 已经非常详细的讲解了centos部署Django的过程。

    Python进击者
  • 面向对象的三个基本特征

    封装,也就是把客观事物封装成抽象的类,并且类可以把自己的数据和方法只让可信的类或者对象操作,对不可信的进行信息隐藏。

    lzugis
  • 零基础学习 Python 之继承(一)

    面向对象的程序设计都三个主要的特征:封装,继承,多态,这个也是类里面的重要内容,这三个特征我会从今天开始依次开始写,今天我们先来看第一个:「封装」,这一部分我会...

    Rocky0429
  • 使用WPScan扫描WordPress博客安全性

    最近看到隔壁的@崇宫苟道的一篇文章《冻果果?00后网络团队?抄袭?(持续更新ing)》,看完真的是被吓到了...我暂且先不对冻果果的行为做任何评价,毕竟今天的主...

    Hans362
  • Android开发笔记(八十四)使用Properties读写属性值

    Java中的配置文件常为.properties文件,而Properties类便是读写此类文件的工具。属性文件有两种格式,一种是文本格式,其内容是“键=值”的...

    用户4464237
  • 在Python中使用QuantLib

    相比TA-Lib在技术分析领域的地位,QuantLib在金融工程领域的地位可以说有过之而无不及。

    用Python的交易员
  • 第49次文章:Filter&Listener

    每周一约!哈哈!小白又来啦!这周我们来聊聊Javaweb的三大组件——servlet、filter、listener。servlet之前的文章已经讲过了,这次来...

    鹏-程-万-里
  • 【通俗理解】凸优化

    用户1594945

扫码关注云+社区

领取腾讯云代金券