JAVA面向对象(OOP)

一、什么是面向对象:  

    1、本质:以类的方式组织代码,以对象的组织(封装)数据。

    2、三大特征:封装,继承,多态。

    3、从认识论角度考虑是先有对象后有类。对象,是具体的事物。类,是抽象,是对对象的抽象。

      从代码运行角度考虑是先有类后有对象。类是对象的模块。

二、创建并初始化对象

    1、使用new关键字创建对象

        使用new关键字创建的时候,出了分配内存空间之外,还给创建好的对象进行默认的初始化,以及对类中的构造器的调用。

        

     2、类中构造器的调用

        1、类中的构造器也称为构造方法,是在创建对象的时候必须要调用的,并且构造器有两个特点:1、必须和类名相同,必须没有返回类型,也不能写void

       

        2、注意:

          a、构造器名要和类名相同,没有返回值。

          b、,使用new,本质就是在调用构造方法。

          c、定义有参构造之后;如果想使用无参构造,就要显示定义一个无参的构造。  

三、封装

   1、该露的露,该藏得藏:

          程序设计追求“高内聚,低耦合”。高内聚就是内部数据操作细节自己完成,不允许外部干涉;低耦合:仅暴露少量的方法给外部使用。

   2、封装:就是对数据的隐藏(private)

     3、想访问私用的属性(private :私有),就用get/set的方法。

          4、封装意义:

       a、提高程序的安全性,保护数据

      b、隐藏代码的实现细节

      c、统一接口

      d、增加了系统的可维护性

      

 四、继承

  1、继承的本质:是对某一些类的抽象,从而实现对现实世界更好的建模。

  2、使用关键字extends(子类是父类的扩展)

      a、继承是类与类之间的一种关系。

      b、继承关系有两个类:一个类为子类(派生类),另一个类为父类(基类),子类继承父类,使用关extends来表示

      c、子类和父类之间,从意义上讲应该具有“is a”的关系。

  3、java类中只有单继承,没有多继承。==》一个父类有很多子类,但一个子类只有一个父类

       4、即使类中什么都没有写,什么都没有继承,都可以调用一些方法?====》因为在java中,所有的类都会默认直接或者间接继承Object类(Object类 ===》超类)

  5、修饰符的权限:public(公共的)>protected(保护的)>default(默认的)>private(私有的)

      注意:一个java类中可以有多个class文件 ,但只能有一个public class

    

   5、super:

      1、注意点:a、super调用父类的构造方法,必须在构造方法的第一个。

             b、super必须只能出现在子类的方法或者构造方法中。

            c、super和this 不能同时调用构造方法

      拓展:super和this区别:

      相同点:在构造方法里面,必须放在方法的第一行,但是this和super不能同时出现和使用。

      不同点:1、代表的对象不同:this :本身调用者的对象;super :代表父类的对象

          2、使用前提不同:this :没有继承也可以使用;super : 只有继承条件才可以使用

          3、构造方法调用对象不同:this :本类的构造 ;super : 父类的构造

  6、重写:

     1、需要有继承关系,子类重写父类的方法

     2、方法名必须相同

     3、修饰符:修饰符的权限可以增大,但不能减小  ;修饰符的权限:public(公共的)>protected(保护的)>default(默认的)>private(私有的)

     4、抛出的异常:范围可以被缩小,但不能扩大

     5、总之,重写:子类的方法要和父类的方法要一致,只是方法体不相同。

         

      为什么要重写父类的方法?

             1、父类的功能,子类不一定完全需要或者不一定完全满足!

            重写的快捷键:alt+insert   选择override

拓展:重写(override)和重载(overload)的区别

    重写:1、override表示重写,在继承关系中,子类重写父类的方法

       2、好处:不影响父类的原来的功能,只是改变子类的功能

       3、“两同两小一大”规则:a、方法名相同,参数类型相同,b、子类返回类型小于等于父类方法的返回类型

                  c、子类抛出的异常小于等于父类方法抛出的异常,d、子类访问权限大于等于父类方法访问权限

     重载:1、overload表示重载,在一个类里。

        2、方法名相同,参数列表不同

        3、好处:体现程序的灵活性

哪些关键词修饰的方法是不能被重写的?

      1、带有static的方法不能被重写,因为它属于类,不属于实例。

      2、带有final的方法是不能被重写的,因为它表示常量,不可被改变的。

      3、带有private修饰符的方法是不能被重写的。

五、多态:

    1、即同一方法可以根据发送对象的不同而采用多种不同的行为方式

    2、多态存在的条件:1、有继承关系,2、子类重写父类方法,3、父类引用指向子类对象(口诀:编译看左边 --》看父类提供的方法  ;运行看右边 --》结果以右边为准)。

       注意:1、多态是方法的多态,属性没有多态  2、父类和子类要有联系  ,否则会就出现类型转换异常   

            4、instanceof :(类型转换)  ==》引用类型,判断一个对象是什么类型

        4、总结:

     1、父类引用指向子类对象(口诀:编译看左边 --》看父类提供的方法  ;运行看右边 --》结果以右边为准)

     2、子类转父类  ==》自动转换  ,但子类可能会丢失自己原本的方法。==》称为向上转型

       父类转子类 ==》强制转换 ,但父类可能会丢失被子类重写的一些方法 ==》称为向下转型

     3、方便调用,减少程序的重用性,提高程序的灵活性,通用性和统一性。

五、Static关键字:

     1、好处:a、随着类的加载而加载  2、全局唯一 , 全局共享  3、可以之间通过类名调用   4、静态只能调用静态,非静态可以调用随便调(也包括静态)

        

     2、静态代码块:

        1、语法:static{ //方法体   }     (代码就是用一段花括号包起来的代码块)

        2、在成员位置的代码块,被static修饰,只加载一次,一般用于项目初始化

        

   拓展:

    

   代码块 拓展:1、在成员位置的代码 ==》构造代码块   :用于提取代码的共性     ---new时就触发

        2、在局部位置的代码块==》局部代码块 :用于控制变量的作用范围  --调用方法时就触发

        3、在成员位置的代码,用static修饰的代码块  ==》静态代码块  :用来程序初始化  --类加载时就触发

        4、执行顺序:静态代码块>构造代码块>构造方法>局部代码块

六、抽象类:

   1、用abstract修饰来表示

   2、abstract修饰符可以用来修饰方法也可以修饰类。如果修饰方法,则这方法就称为抽象方法;如果修饰类,则该类就称为抽象类。

   3、抽象类中可以抽象方法,也可以有普通方法。

   4、抽象类,不能使用new关键字来创建对象,它是用来让子类继承的。

   5、抽象方法,只有方法的声明,没有方法的实现,它是用来让子类实现的。

   6、子类继承抽象类,那么就必须要重写抽象类中的抽象方法。没有重写抽象方法,则该子类该声明为抽象类。

    

   7、总结:

      1、不能new 这个抽象类,只能靠子类去实现,(调用时使用多态的方法)

      2、抽象类中可以写普通方法

      3、抽象方法必必须在抽象类中

      4、子类怎么决定到底要重写那个方法?

            对于普通方法:想改父类的方法,就重写,

            对于抽象方法,子类要么是一个抽象类,要么就要重写父类的所有的抽象方法。

七、接口:

    1、用interface关键词来表示。声明类的关键词使用class,声明接口的关键词使用interface。

    2、java中的类只有单继承,但是接口可以支持多继承,多实现。

    3、接口是一个特殊的抽象类,因为它的接口里面全部都是抽象方法。

    4、接口里面的方法,只能靠类来实现。接口和类之间发生实现关系implements

    5、接口和抽象一样,都不能new,只能靠子类实现(调用时使用多态的方法)

      

  拓展:

    1、普通类:只有具体实现。

    2、抽象类:具体实现和规范(抽象方法)都有!

    3、接口:只有规范!就是定义了一些规则。自己无法写方法,==》专业的约束  、约束和实现的分离:面向接口的编程

  

正在学习中,有错误的地方,请多多指教!
原文地址:https://www.cnblogs.com/16904985zy-aoyu/p/14379438.html