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条)

报告相同问题?

悬赏问题

  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 对于相关问题的求解与代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 信号傅里叶变换在matlab上遇到的小问题请求帮助
  • ¥15 保护模式-系统加载-段寄存器
  • ¥15 电脑桌面设定一个区域禁止鼠标操作
  • ¥15 求NPF226060磁芯的详细资料