面向对象——java

面向对象

      面向对象是相对于面向过程的一种编程思想,它是基于面向过程的。

          面向过程:侧重于完成功能的过程。

          面向对象:侧重于完成功能的结果,强调的是对象。


       三个思想特点:

             a:更符合人思考习惯的一种思想。

             b:把复杂的事情简单化。

             c:把程序员从执行者变成指挥者。


类与对象

     编程语言都是为了把现实世界的事物给体现出来的,所以编程语言就应该和现实世界的事物对应。

       现实的事物分为两种:

              内在的特征:对应类的成员变量。

              外在的行为:对应类的成员方法。

     类:

         是一组相关的属性和行为的抽象。

         类的组成:

                成员变量:名词

                       来自于现实世界的中的属性的一种抽象描述。

                构造方法:

                       用于创建对象,对对象进行初始化

                       特点:

                             a :方法名于类名相同。

                       b:方法没有返回值类型。

                       c:方法没有返回值。

                 注意:

                       a:系统默认给出一个无参构造方法。

                       b:自己给出构造方法,系统将不在提供。

                       c:可以通过构造方法,给成员变量赋值。

                成员方法:名词+动词    

                  完成一些功能。        

    对象:

        对象是类事物的具体的个体,也被称为实例。

        首先把事物的特征和行为体现出来,把事物转换成Java中的类,最后创建对象调用。

           应用场景:

                  创建对象:类名 变量名 = new 类名();

                  调用对象:对象名.方法();    对象名.变量;

          匿名对象:

                 没有名字的对象。

                 应用场景:

                         a:调用方法只用一次的时候(可提升效率)。

                         b:作为实际参数传递。

     局部变量与成员变量的区别:

           在类中的位置:

                      成员变量:在类中,方法外。

                      局部变量:在类的方法中。

         在内存中的位置:

                 成员变量:在堆中。heap

                 局部变量:在栈中。stack

         生命周期:

                 成员变量:随着对象创建而存在,随着对象消失而消失。

                 局部变量:随着方法调用存在,随着方法调用完毕而消失。

         初始化值:

                 成员变量:有默认初始值。

                     基本数据类型:

                          整型:0

                          浮点:0.0

                          char:’\u0000’

                     引用类型:null

                 局部变量:必须先声明,再赋值,最后才能被使用。

面向对象三大

     1,封装

            隐藏实现的细节,仅对外提供公共的访问方式。

                 体现形式:

                       a:类

                       b:方法

                       c:被private修饰也是封装的体现。

     2,继承

            在已知类的基础上扩充新的内容。

            extends表示继承的关系。class B extends A{}

            父类的定义:

                 是多个类中相同的成员变量和成员方法抽取出来的。

                 特点:

                             a:java中只能单继承。

                             b:java中可以多层继承(体系)。

                     优点:

                             a:提高了代码的复用性。

                             b:让类与类产生了联系,是多态的前提。

                     应用场景:

                             a:继承表达的是一种关系:is  a 。

                             b:不要为了部分功能而去继承。

                    继承后父子之间的成员关系:

                            成员变量:

                                   a:如果名字不同,直接调用本类的。

                                   b:如果名字相同的变量,在方法中使用的时候:

                                              先在局部范围查找,有就使用,

                                              然后成员位置查找,有就使用,

                                              最后在父类成员查找,有就使用,

                                              再没有就报错。

                            构造方法:

                                  a:子类并没有继承父类的构造方法。

                                  b:子类的构造方法执行前,会先执行父类的构造方法。这个时候,并没有创建父类对象,仅仅是对父类的内容进行了初始化。

                                        注意:如果在父类中没有无参构造,在子类中要么用this(…),要么用super(…) 。

                            成员方法:

                                 a:如果名字不同,直接调用本类的。

                                 b:如果有名字相同的方法,是重写的形式(覆盖、复写)。子类使用的是自己的方法,覆盖父类的方法。

                  方法重写:

                             override,子类与父类方法声明相同。  

                             体现形式:

                                  a:方法名相同,参数列表相同。

                                  b:子类返回值类型小于等于父类返回值类型。

                                  c:子类访问权限修饰符大于等于父类访问权限修饰符。

                             注意:

                                  a:父类的私用方法不能被重写。

                                  b:静态方法只能被静态方法重写。

                 方法重载:

                        overload,方法名相同,参数列表不同。

                        体现形式:

                                 a:方法名,参数列表不同。

                                 b:与返回值类型无关。

                                 c:与返回值无关。

                 this与super的区别:

                       this:代表当前类的对象,谁调用,就代表谁。

                       super:代表父类存储空间标识,父类的引用。

                       应用场景:

                             一般都在子类使用。

                             成员变量:

                                     this.变量

                                     super.变量

                             构造方法:

                                    this.(…)

                                    super.(…)

                             成员方法:

                                    this.方法()

                                    super.方法()

                          类的初始化:

                                        Person p=new Person();    

                                             a:把Person.class类加载到内存。

                                             b:执行该类中的静态代码块,如果有,给Person.class进化初始化。

                                             c:在栈内开辟存储变量p的空间,分配内存地址。

                                             d:在堆内开辟new Person()的空间。

                                             e:对成员变量进行默认初始化。

                                             f:对成员变量进行显示初始化。

                                             g:如果有构造代码块,通过它对成员变量进行初始化。

                                             h:通过构造方法对成员变量初始化。

                                             i:对象创建完毕,把堆内存的地址值赋给栈内存中的变量p。

     3,多态

            同一个对象在不同的时刻表现出不同的状态,编译期类型与运行期类型不一致。

            根据实际的对象不同而表现出的不同状态。

                 前提:

                       a:有继承或实现关系。

                       b:有method override。

                       c:有父类或父接口引用指向子类对象。

                 弊端:

                      不能使用子类特有的功能。

                 优点:

                      提高了程序的扩展性与维护性(由继承来保证)。

                向上转型:

                      把子类对象赋值给父类对象或父接口引用。

                向下转型:

                      把父类或父接口引用强制转换为子类

                体现形式:

                     a:具体类多态

                     b:抽象类多态

                     c:接口多态


抽象类

      多个具体的事物具备相同的方法声明,而方法体不同,抽取方法声明,定义到一个类中。

      一个没有方法体的方法是一个抽象方法,一个类有抽象方法,该类必须定义为抽象类。

           特点:

               a:抽象类或抽象方法被abstract修饰。

               b:抽象方法没有方法体,抽象类中不一定有抽象方法,而有抽象方法一定是抽象类。而没有抽象方法的抽象类是为了不让外界创建对象。

               c:抽象类不能被实例化。构造方法主要用于对子访问父类数据的初始化。

               d:子类继承抽象类,要么是子类也是抽象类,要么重写父类所有抽象方法。

           抽象类的成员:

                  成员变量:有变量,也有常量。

                  构造方法:有构造方法,用于子类访问父类数据的初始化。

                  成员方法:有抽象方法,也有非抽象方法。

           注意:

                  抽象类不能与以下几个关键字共存。

                a:final,final修饰的方法不能被重写,而abstract修饰的方法必须被重写,冲突。

                b:private,private修饰的方法不能被重写,而abstract修饰的方法必须被重写,冲突。

                c:static,static修饰的方法可以直接通过类名调用,而abstract修饰的方法,没有方法体,调用没有意义。

         实现继承:

                   分析:从具体到抽象。

                   实现:从抽象到具体。

                   学习:抽象的内容,因为它定义的是共性的内容。

                   使用:具体的内容,因为它才是具体的实现,才能实现更多的功能。

接口

      当一个类中的方法都是抽象的时候,Java推荐了一种更抽象的方式,叫接口。

      特点:

                a:接口用interface修饰。

                b:子类实现接口用implements标识。

                c:接口不能被实例化。

                d:子类实现接口的时候,要么子类也是抽象类,要么全部实现接口的方法。

      思想特点:

                a:对外暴露的规则。

                b:程序的扩展功能。(多态)

                c:降低程序的耦合性。(多态)

                         高内聚

                         低耦合

                         效率与安全

                d:让类可以多实现。

      成员特点:

              成员变量: 是常量,默认修饰符:public static final

              成员方法:是抽象方法,默认修饰符:public abstract

      接口和抽象类的区别:

              共性:都是不断抽取出来抽象的内容。

                    成员特点:

                                抽象类:

                                          成员变量:可以是常量,可以是变量。

                                          构造方法:有。

                                          成员方法:可以是抽象方法,也可以是非抽象方法。

                                接口:

                                          成员变量:只能是常量。

                                          成员方法:只能是抽象方法。

                                          无构造方法。

                   继承和实现关系:

                              a:类与类的关系:

                                          继承关系,只能单继承,可以多层继承。

                              b:类与接口的关系:

                                          实现关系,可以单实现,也可以多实现,还可以在继承一个类的同时实现多个接口。

                              c:接口与接口的关系:

                                          继承关系,可以单继承,也可以多继承。

                   设计区别:

                               抽象类中定义的体系是共性,表达的是:is a的关系。

                               接口定义的体系是扩展性,表达的是:like a 的关系。

内部类

         把类定义在一个类的内部。

         特点:

               内部类可以直接使用外部类,包括私有。

               外部类要使用内部类,必须要创建对象调用。

          内部类分类:

                成员内部类:定义在类中,方法外的内部类。

                                private:为了数据安全。

                                static:为了方便调用。

                局部内部类:定义在方法中的内部部类。

匿名内部类

                     a:没有名字的内部类。其本质是一个对象。

                     b:前提,存在一个抽象类或者接口。

                     c:格式:

                                  new 抽象类名或接口(){

                                          重写父类方法;

                                  };

              本质:是一个继承了类或者实现接口的子类匿名对象。


关键字

       private:

             私有的意思,可以修饰成员变量、构造方法、成员方法。

             被private修饰的成员只能在本类中访问。

             怎么赋值给被private修饰的成员:

                         a:同过setXxx()和getXxx()方法。

                         b:通过构造方法

       this:

             代表当前类的对象,谁调用,就代表谁。

             应用场景:

                 a:解决局部变量隐藏成员变量。

                 b:在本类的构造方法中调用本类的构造方法(只能放在第一条语句)。

       super:代表父类空间存储标识,可以理解为对父类引用。

       final:

             最终的意思,它可以修饰类,成员方法,变量。

             特点:

                  它修饰的类不能被继承。

                  它修饰的成员方法不能被重写。

                  它修饰的变量是常量。

           注意:

               final修饰的基本数据类型的值不能被改变。

               final修饰的引用类型,地址值不能改变,对象内容可以改变。

       abstract:抽象的意思,可以修饰成员方法和类。

       interface:接口的意思。

       extends:继承的关键字,让类与类之间产生了联系,是多态的前提 。

       implements:实现接口的关键字。

       static:

            表示静态的意思。

            可以修饰成员变量和方法。

            特点:

                 a:随着类的加载而加载。

                 b:优先于对象而存在。

                 c:被所有对象共享。

                 d:可以直接通过类名直接调用。

                      静态修饰的内容,即可以通过类名调用,也可以通过对象调用。

            注意:

                 a:静态只能访问静态。 因为静态方法和变量在类加载时就存在,非静态变量在对象存在时才存在。

                 b:随着类加载而存在,生命周期长,占用资源,效率低。

                 c:静态方法中不可定义this,super关键字。因为静态优先于对象存在,所以静态方法不可以出现this。

            应用场景:

                 a:被所有对象访问的数据。节省空间,没必要为每个对象单独存储。

                 b:工具类,方便直接通过类名调用。

           main方法的解释 :

               public static void main(String [] args)

                 public:公共的,足够的访问权限。

                 static:静态的,为了不创建对象,直接调用。

                 void:返回給JVM没有意义。

                 main:主方法,程序入口,是标准规范。

                 String [] args:早期为了接收键盘数据,现在被Scanner替代。

            静态成员变量与成员变量的区别:

                 a:在类中的初始化值的过程是一样的。

                 b:在内存中的位置:

                       成员变量:在堆中。

                       静态成员变量:在方法区的静态区。

                 c:生命周期:

                       成员变量:随着对象的创建而存在,随着对象的消失而消失。

                       静态成员变量:随着类的加载而存在,随着类的消失而消失。

                 d:设计和调用的区别:

                       设计:

                           成员变量:每个对象是独立的特征。

                           静态成员变量:所有对象是共享的特征。

                       调用:

                           成员变量:只能通过对象调用。

                           静态成员变量:可以通过类名直接调用,也可以通过对象调用。


权限修饰符


                            本类                同一包下            不同包下的子类             不同包下的无关类

private                     y

default                     y                      y                            

protected                 y                      y                          y

public                       y                      y                          y                                       y



 权限修饰符的组合以及常见使用

                              类                  成员变量               构造方法                         成员方法        

private                                              y                           y                                     y

default                     y                       y                           y                                     y

protected                                         y                           y                                     y

public                       y                      y                           y                                     y

abstract                   y                                                                                          y

final                         y                       y                                                                 y

static                                                y                                                                 y


本文出自 “每一次的总结会有新的感悟” 博客,谢绝转载!

面向对象——java,布布扣,bubuko.com

面向对象——java

上一篇:C语言小知识总结


下一篇:Java POI导出EXCEL经典实现 Java导出Excel弹出下载框 [转]