黑马程序员--java面向对象

来源:互联网 发布:淘宝中国一号白银店铺 编辑:程序博客网 时间:2024/06/09 23:03

                                             ------- android培训  java培训、期待与您交流! ----------

一、面向对象的概念:

    什么是面向过程:重点强调过程(动作),例如C语言,就是通过函数来体现的
    什么是面向对象:重点强具体的事物,是基于面向过程,将过程封装到了对象中.通过得到对象,去调用指挥.

    例如毕教师说的那样:将大象装进冰箱
        面向过程:
            1.打开冰箱
            2.存储大象
            3.关闭冰箱
        这三个步骤都在强调动作,而动作又是通过函数来体现的,
        面向对象:
            1.冰箱打开
            2.冰箱装入大象
            3.冰箱关闭
        这三个步骤都在强调冰箱这个具体的事物,通过冰箱来操作这些动作.

二、面向对象中的构造方法及其注意事项:
    构造方法(函数)
    
        1.构造方法的作用
            初始化对象
        
            类名 引用名=new 构造方法();

        2.构造方法的格式

            1.构造方法的名字必须与类名相同。
            2.构造方法不能有修饰符(权限除外 public private )
            3.构造方法没有返回值类型 void也没有。

        3.构造方法的注意事项
            1.如果一个类没构造方法,那么当它加载时, jvm会为其分配一个默认的空的无参构造方法
              但是如果我们手动去创建了一个构造方法,那么默认的就不会在创建。

            2.构造方法是用来创建对象的,我们程序员不能手动调用构造方法。

            3.构造方法也可以重载。好处是可以通过多种途径去实例化类的对象。


    4.成员变量与局部变量区别
    1.定义的位置不同
         成员变量:定义在类,作用于整个类
         局部变量:定义在函数或语句,作用于整个函数或语句
      2.出现的位置不同
          成员变量:当对象创建的时候,出在堆内存中的对象中
          局部变量:所属区间被运算时,出现在栈内存中.
      3.生命周期不同
          成员变量:随着对象的出现而出现,随着对象的消失而消失
          局部变量:随着所属运算区间的结果,而立刻释放.
      4.初始化值
          成员变量:因为在堆内存中,有默认初始化值

          局部变量:没有默认初始化值.


    局部代码块与构造代码块  
    
    { 代码块  }

        局部代码块:声明在方法内的代码块
        构造代码块:声明在类中的。

    作用:
        局部代码块:限定变量的生命周期.

        构造代码块:它是只要构造方法执行,它就会执行,并且优先与构造方法执行.



二、面向对象的特点:

    1.封装(encapsulation):
        定义:是指隐藏对象的属性与实现的细节,仅对外提供公共的访问。

        好处:    1.将变化隔离.
                  2.便于使用.
                  3.提高重用性.
                  4.提高安全性.
        原则:
            1.将不需要对外提供的内容隐藏起来,
            2.把属性隐藏起来,仅对外提供公共的访问方式
        
    我们在使用时,一般是将成员属性private,对外提供get()  set()方法
    set方法是应该有参数的,它是用来接收信息进行赋值
    get方法是有返回值班的,它的作用是让外部可以访问我们的成员属性。

    2.继承(inherit)
        定义:是指通过继承子类自动拥有父类的所有成员(成员属性与成员方法)。
        好处:
            1.继承的出现提高了代码的复用性
            2.继承的出现,是多态的前提
        特点: 单继承,不支持多继承(原因:产生了不确定性关系),支持多层继承
        
        继承中的成员属性
                    
            在子类中如果有与父类中重名的成员属性,那么在子类中使用时默认是子类中的属性
            如果想要调用父类中的成员属性需要使用super.

            继承中的成员方法

                重写(覆盖):在子类中有一个与父类同名的方法(返回值类型,参数列表一样。)
                       这是无们就说子类中重写了父类的方法。

        重写目的:子类可以对父类中的方法进行功能.
        
        重写的注意事项:1.重写的方法不能使用比被重写的方法更严格的修饰符
                       2.静态只能重写静态.


        
    继承中的构造方法
        
         1.如果父类中没有构造函数,子类会自动创建一个无参的构造函数.                              默认省略super();        
         2.如果父类中只有无参的构造函数,子类会直接调用这个无参构造函数.                          默认省略super();        可以加上构造代码块
        3.如果父类中只有有参的构造函数,子类只能调用父类的有参构造函数.                          指定super(参数);
         4.如果父类中同时有无参的构造函数与有参的构造函数,子类可以调用有参或无参的构造函数.    默认省略super()或者指定super(参数)

        为什么子类的构造函数都要去访问父类中的构造方法:
        因为子类继承了父类,通过访问了父类的构造方法,就可以访问父类中的相关的属性和方法.



    抽象类:
    定义:当描述事物时,没有足够的信息对该事物进行描述,那么该描述对应的类就是一个抽象类.
    特点:
        1.没有方法体的方法是抽象方法,一定要定义在抽象类中
        2.抽象类与抽象方法一定要用abstract修饰.
        3.为什么不能被实例化,因为调用抽象方法没有意义.
        4.怎么样实例化:抽象类必须由其子类覆盖掉所有的抽象方法后,其子类才可以进行实例化,否则,该子类还是一个抽象类.


    3.多态:
        定义:某一类事物的多种存在形态。最常见的一种多态:父类引用指向子类对象

        好处: 1.前期:提高代码的复用性,可扩展性.
           2.后期:提高了代码的可维护性.

        弊端 :只能调用在父类中声明的行为或属性而子类中特有的行为或属性调用不了。

        多态前提:1.必须存在继承关系.
                 2.必须有重写。

        关于对象向上向下转型
            
            向上转型:  父类引用指向子类对象  自动转换         
            向下转型: 将父类的引用强制转换成子类的引用。 强制转换

            为什么向上转型:它提高了代码的扩展性与可维护性。
            为什么向下转型: 因为要调用子类中特有的行为。
            
            向下转型注意事项:
                1.必须存在继承关系.
                2.需要使用 instanceof 进行判断。
        接口:
        
         特点:1.接口用interface来定义
            2.接口中的成员都有固定的修饰符
            3.为什么不能实例化,因为方法全是抽象的
            4.怎么样实例化,接口必须由其子类覆盖了所有的抽象方法后,该子类才可以实例化,否则,该子类还是一个抽象类.
            
         好处:接口就是对外暴露的规则.
            接口的出现提高了扩展性.
            接口的出现降低了耦合性.


    
三、类、抽象类、接口的关系

        类与类之间是继承,而且是单继承.
        为什么:因为调用时会产生不确定,比如,两个类中的方法声明是一样方法体不一样,就不知道调用那个方法.

        类与接口之间是实现,而且可以实现.

        接口与接口之间是继承关系,而且可以多继承.

        为什么,因为接口只有方法声明,没有方法体.所有不会产生不确定性.



四、面向对象中重要的关健词:
static
    
    特点:
        1.随着类的加载而加载,优先于对象存在
        2.被所有对象所共享
        3.可以直接被类名调用
    注意事项:
        1.静态方法只能访问静态成员
        2.静态方法中不可以写this,super关键字
        3.主函数是静态的
        static的优点:可以节省资源
        static弊端:  生命周期长 就用时不能操作实例属性.
this
    this指代本类对象

    它是用来区分局部变量与成员变量的。

    this出现的位置
        1.构造方法. 代表是当前构造正在创建的对象。
        2.成员方法. 代表是调用这个方法的对象
final关键字

        final可以修饰
        属性  ------>代表这个属性是常量
        方法  ------>不可以被重写
        类  --------->不可以被继承   
                    String类 是字符串类,这个类是一个很典型的final类

        如果一个变量是用final修饰的,那么这个变量名全都大写.

        如果当前变量是用final修饰的,并且没有初始化值,那么我们可以在构造方法中
        对其进行一次赋值操作。
原创粉丝点击