Java面向对象

面向对象

  面向对象是一种编程思想

面向对象的特点

  1、面向对象是一种常见的思想,是符合人们思考习惯的;

  2、面向对象可以将复杂的问题简单化;

  3、让原来过程中的执行者,变成了对象中的指挥者;

  Java中认为任何一个事物都是对象;

类和对象的关系

  类是对现实中的事物的描述;

    类是怎么样描述事物的? 

      1、属性      2、行为;

    类的成员:

      1、成员变量  2、成员方法;

  对象是通过类创建的 实实在在 存在的 个体实例;

  对象可以封装特有的数据;

  举例:  一辆汽车具备轮胎数、颜色……

               学生对象封装了 姓名 年龄 身高等数据;

  通过new关键字 来创建一个对象;

  通过 对象.成员 的方式,可以调用该对象的属性及方法;

成员变量和局部变量的区别

  作用域不同

   1、成员变量定义在类中,整个类都可以访问;

    局部变量定义在方法、语句、局部代码块中,只有所属区域可以访问;

  存储位置不同

   2、成员变量存储于堆内存中;

    局部变量存储于栈内存中;

  生命周期不同

   3、成员变量 随着对象的创建而创建 ,对象的消失而消失;                                

    局部变量 随着所属区域的执行而创建 ,执行结束而消失;

  初始化不同

   4、成员变量 有 默认初始值;                                                                            

    局部变量 没有默认初始值;

  属性的显示初始化:

    对成员变量赋一个,默认的,习惯性的初始值;

  匿名对象  没有名字的对象;

    什么时候使用匿名对象:其实就是创建对象的简写形式,当只对对象的方法进行一次调用时,可以简化成匿名对象;

   特点:  1、匿名对象一旦被创建,就已经是垃圾内存;

      2、如果匿名对象被作为参数进行传递,则不会被立刻变成垃圾内存,因为方法的引用会指向该内存;

封装

  即:封闭 包装

  定义:隐藏对象的实现细节,对外提供了访问方式;

  特点      1、提高了代码的安全性  2、便于使用  3、将变化隔离  4、提高了代码的复用性;

  Java bean (咖啡豆)- 就是一个普通的Java类,但是一个Java类如果想成为一个bean的话,必须符合三个条件:

      1、所有属性私有;-》保护属性值不被破坏;

      2、提供属性的公有的get和set方法;-》可以给属性添加约束条件,或者限定不同权限的用户是否可以获取到属性的值;

      3、必须提供无参的构造方法;-》Java bean多是用在框架中,框架需要使用bean的无参构造方法生成对象;

        建议所有的类都要写成bean的形式;

Function - 函数

Method -  方法

  构造方法(构造器):

    1、方法名必须和类名一致;

    2、没有返回值类型,任何返回值类型都不能写;

    3、构造方法中一定不能用return来返回一个值;

    4、可以有参数,也可以没有参数;

    5、一般情况下,构造方法是公有的;

   构造方法的作用是用来生成对象的,换句话说,一个类如果想要被实例化(生成对象),那么必须要有构造方法;

    如果没有给类定义任何构造方法,那么JVM会自动的为这个类分配一个无参的空构造方法;

    如果已经定义了任何的构造方法,则JVM不会再自动分配无参的空构造方法;

  当我们的对象中有属性需要初始化的时候,使用构造方法是最好的选择;

继承

  发生在两个类之间,被继承的类叫做父类(基类,双亲类,超类),继承类叫做子类(派生类);

    在Java中,使用extends关键字实现继承;

    1、继承关系一旦确立,子类就继承了父类所有的属性和方法,但是不包括私有成员和构造方法;

    2、有继承关系的类,如果实例化子类的对象,首先会生成其父类的对象,然后再生成子类的对象;

    3、在生成父类对象时,默认是调用父类的无参构造方法来创建对象的,如父类没有无参的构造方法,则程序会出现编译错误;

      这时候,子类中必须显式的调用父类的某一个有参构造方法来构造父类;

  super关键字的用法:

    代表的是父类对象;

     1、子类中任何方法中(成员、构造)都可以用super.属性名,或者 super.方法(参数列表)来引用父类对象的属性和方法;

     2、super(参数列表)- 调用父类的某个构造方法,必须用在子类的构造方法中,并且必须是构造方法中的第一句话;

  继承的作用

     1、继承可以扩展父类的属性和方法;

     2、继承也是代码实现复用性的一个重要的手段;

   严禁代码的拷贝 - 不能出现冗余代码(相同代码)- 代码的坏味道; -》 代码的复用性;

   什么样的两个类之间有继承关系?

    初步判定:A和B两个类,如果满足 A is a king of B ,则认为A和B有继承关系;

    科学判定:里氏替换原则 - A和B两个类,只有A类能够完成替代B类所有特征和行为的时候,A和B才有继承关系;

    换句话说,如果A继承B,继承关系确定,子类对象可以完全替代父类对象;

         根据里氏替换原则  B b = new A(); - 父类引用指向子类对象;- 多态 的 基础 ;

多态

  - 解耦合 - 开闭原则 -> 对扩展开放,对修改关闭;目标:高内聚 低耦合

     耦合的缺点:

    1、灵活性差  2、可维护性差  3、可扩展性差

  

  什么是多态

    字面意义 - 一个事物的多种形态;

    编码角度 - 一个方法的多种实现;

    设计理念 - 将做什么和怎么做分开;

  如何实现多态

    1、必须有泛化(继承、实现)关系;  2、必须有方法的重写;  3、必须有父类(接口)引用指向子类(实现类)对象;

  方法的重载和重写:

    重载 - 方法名相同,参数列表不同(个数或类型不同)的方法,称之为重载;

    重写 - 在子类中,有和父类中同方法名,同参数列表,同返回值类型的成员方法;称之为重写;

      注:重写过程中,子类中方法的访问限制符必须大于等于父类中方法的访问限制符;

        private < default < protected < public

      当父类引用指向子类对象时:Father s = new Son();

      调用的方法是谁的方法,取决于对象的类型,而不是引用的类型;

      调用的属性是谁的属性,取决于引用的类型,而不是对象的类型;

    在工作中,不建议在父类和子类中定义同名的属性;

      

 

posted @ 2016-08-26 15:35  奔跑的咖啡豆  阅读(239)  评论(0编辑  收藏  举报