weixin_43944282 2019-04-09 15:13 采纳率: 100%
浏览 380
已采纳

新入行小白了解谈java面向对象的三大属性有些疑惑,还望各路大神指教教导一下

面向对象的三大基本特征,众所周知是:封装,继承,多态。
1.封装:把同一类事物的共性(包括属性和方法)归到同一类中,方便使用,也隐藏了信息,只需根据留在外部的接口(对象名和参数)进行操作,1)具体是通过getter,setter方法
2.继承:是从已有的类中派生子类,有着父类的属性和行为,一般只支持单继承,是可传递的,继承了属性方法,也有自己新定义的属性方法。具体是extends,implents
3.多态:这就是最有些疑惑的了,2)有很多人说继承是多态的前提,也有人说封装和继承都是多态的前提。甚至还有人说是继承的一种表现方式,但多态本身的话我也看到了很多,如编译期与运行期状态不同,同一个事务对象在不同时候的状态,也有允许不同类型的子对象对统一消息做出不同回应?不过,在多态这方面我目前能确定的是重写和重载构成多态,是体现多态的两种方法,即不同返回值,不同的参数个数就是多态(,也就是说方法的重写,重载与动态连接构成这多态性?可能也有理解有误,请多指教)。
1)2)感觉也有些问题

  • 写回答

3条回答 默认 最新

  • threenewbee 2019-04-09 17:24
    关注

    这个东西你越搜索越迷惑,因为网上错误的说法占了主流。

    多态的意思很简单,就是一个概念,多种形态。
    很多人的误解在于,把多态简单理解为派生类的函数重写,这种理解是很片面的。函数重写是实现多态的一种手段,但是实现多态还有别的手段。

    首先说为什么函数重写是实现多态的一种手段,道理很简单,对于派生类来说,它也可以被视作基类的类型,因此它是一个概念。但是每个派生类相同的方法有自己独特的实现,这个就是多种形态。所以是多态。

    而多态还有别的手段,具体来说,泛型、函数重载、运算符重载(C++等语言支持,Java不支持)也是多态的实现手段。

    比如说泛型,一种数据结构或者算法就是同样的概念,而不同的参数类型构成了不同的形态。

    你提到了封装,你说getter/setter是封装,没错,但是也是片面的,除了getter/setter,用来修饰成员变量和方法的关键字,private protected,也构成封装,使得类外部不能直接访问它们。final 关键字修饰类,使得类不能派生,这也是封装,不加上virtual关键字的方法,不允许派生类重写,这也是封装。

    继承也是类似的,不过对于Java来说,的确只有接口和派生类两种。对于一些语言,支持原型(prototype)继承。
    总之,无论封装、继承还是多态,说的是面向对象的设计理念,而不是具体语法。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

悬赏问题

  • ¥15 安装svn网络有问题怎么办
  • ¥15 Python爬取指定微博话题下的内容,保存为txt
  • ¥15 vue2登录调用后端接口如何实现
  • ¥65 永磁型步进电机PID算法
  • ¥15 sqlite 附加(attach database)加密数据库时,返回26是什么原因呢?
  • ¥88 找成都本地经验丰富懂小程序开发的技术大咖
  • ¥15 如何处理复杂数据表格的除法运算
  • ¥15 如何用stc8h1k08的片子做485数据透传的功能?(关键词-串口)
  • ¥15 有兄弟姐妹会用word插图功能制作类似citespace的图片吗?
  • ¥15 latex怎么处理论文引理引用参考文献