黑马程序员技术交流社区

标题: 面向对象三大特征 [打印本页]

作者: ordinary    时间: 2015-3-30 12:01
标题: 面向对象三大特征
众所周知,java中的面向对象的三大基本特征是:【封装】、【继承】、【多态】
通过几天的初步学习,加上C++的基础,对三大特征有了进一定的认识和了解,现将自己这几天的学习笔记做一下归纳总结:

一、封装
        对象要有一个明确的边界;边界的划分(对象各司其职、对象的粒度、对象的可重用性)
        具体来说:
                1.属性: 私有 private(提供set和get方法)
                2.方法: 公开或私有public/private
                3.方法声明 --> 公开
                  方法实现 --> 隐藏
                 实现改变时,对对象的使用者没有影响。

二、继承
              共性放到父类,特性放到子类;父类 --> 子类,其实就是特殊 --> 一般
        1.关键字: extends  例如:Dog extends Animal{}
        2.java中一个类最多只能有一个直接的父类,即单继承(具有简单性、树形结构),
          C++中是单继承
          java中要实现多继承,通过接口来实现。
        3.父类中所有属性和方法都能继承给子类;父类中的私有方法不能继承给子类。
        4.
                          访问权限                     继承 
         private        本类内部                   不能继承        
           default        本类+同包              同包子类可以继承           
           protected      本类+同包+不同子包         可以继承
           public         公开                       可以继承

        5.构造对象过程
                   (1)分配空间
                   (2)递归地构造父类对象
                                a. 父类 初始化属性
                                b. 父类 构造方法
                   (3)初始化属性
                   (4)调用构造方法

        6.super  
               用法:
                   super()  调用父类的构造方法,只能出现在构造方法的第一行
                   super.方法名   super表示父类的对象,通过它去调用父类的方法
               注意:在写类的时候,一定要写默认无参的构造方法,如果一个构造方法的
                     第一句既不是this(),也不是super()时,那么就会在这里隐含的调用
                     他的父类的无参的构造方法,即隐含的有super()。

三、多态
            运行时多态。
            子类的对象放在父类的引用中,例如 Animal a=new Dog,子类对象当父类对象来使用。
        1.多态原则:
                  (1)对象类型不变
                  (2)只能用引用调用其引用类型中定义的方法
                  (3)运行时,根据对象的实际类型去找子类覆盖之后的方法
             例子:
                  有Animal类中有eat()和sleep()两个方法,sleep()中睡8小时;子类Dog中有
                  eat()方法,sleep()方法中睡6小时,还有wangwang()方法。
                  现创建Animal a=new Dog(); 不能调用a.wangwang(),调用a.sleep()输出睡6小时。
      
          2.对象的强制转换
                 格式: 引用 instanceof 类型
                        引用所指的对象是否鱼类相符,返回值boolean值。
                 用法:
                       Animal a=new Cat();
                       if(a instanceof Dog)
                       {
                          Dog d=(Dog)a;
                          d.wangwang();
                        }
                 说明:如果只有Dog d=(Dog)a;运行时错误,因为a是Cat而不是Dog (多态原则第一条)

          3.多态的灵活变换
                  (1)用于参数列表上:
                               public void m(A a){} 可以用A类的任何子类对象作为参数
                  (2)用在返回值上:
                              public A m(){}  这个方法可能返回A类的任何子类对象
作者: 孙晓威    时间: 2015-3-30 14:49
不同子包  应该改成 不同包子类吧
作者: 千玉屑    时间: 2015-3-31 10:19
过来学习一下
作者: 林吉前    时间: 2015-3-31 10:45
我为第二次面试准备的,虽然没有用到,但是我想第一次面试可能会问吧,给你参考参考了。
  java是解释型语言。   
  问:说说面向对象:
    面向对象的编程思想就是把现实世界中存在的事物尽可能使用代码逻辑在程序中表现出来,让程序尽可能拥有人类的思维方式。要面向对象编程就必须要用到面向对象的三大特性,封装、继承、多态。封装就是把复杂或者相同相近的事物或行为集合在一起,隐藏内部的具体实现细节,只对外暴露简单使用的功能。继承就是让类与类产生关系,子类会拥有父类的所有属性,必须是有所属关系才可以使用继承,而继承也为面向对象提供了多态的特性,java不支持多继承,以为多继承会照成方法或者参数不明确问题。
    多态的前提是必须要有继承与方法的重写,或者是有实现接口重写方法,java编程分为运行时和编译时,而多态是在编译时使用父类或者接口引用,而在运行时使用具体对象引用,以此达到父类引用或者接口引用指向子类对象产生多态。
    在GOF23设计模式中接口、组合跟多态都是一起使用的,例如行为模式中的状态模式,设置一个状态接口,然后许多种状态类实现那个状态接口,真实对象持有这个状态接口的引用,真实对象再通过多态达到不同状态的切换。
作者: ws748264    时间: 2015-3-31 19:29
过来学习一下
作者: showdy    时间: 2015-3-31 21:18
这个好好看
作者: SunshineCui    时间: 2015-3-31 21:33
赞一个,谢谢楼主
作者: 大手牵小手    时间: 2015-3-31 21:42
学习了!
作者: 黑马:二师兄    时间: 2015-3-31 21:43
+1!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
作者: 黑色救护车    时间: 2015-3-31 21:45
总结得很不错啊~ 辛苦楼主~
作者: Chenli    时间: 2015-3-31 21:45
学习一下
作者: 乐生    时间: 2015-3-31 21:46
感谢分享 来学习一下




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2