黑马程序员_面向对象

------- <a href="http://www.itheima.com" target="blank">android培训</a>、<a href="http://www.itheima.com" target="blank">java培训</a>、期待与您交流! ----------


面向对象(OOP Oriented Object Programming)

1. 什么是面向对象
  |-- 人们解决现实中问题的一种思维模式,思想
  |-- 万物皆对象
  |-- 日后开发:当你想完成一个功能的时候,找有没有可以完成这个功能的对象
      如果有,建立这个对象,指挥这个对象做事情
      如果没有,自己创建对象,指挥这个对象做事情


2. 什么是对象
 |-- 对象就是现实生活中,确实存在的那个个体
 |-- 对象是可以相互转换的:
    |-- 做家务的,找了具备做家务功能的对象(媳妇)
    |-- 将我培养成了具备做家务功能的对象
 |-- 光波炉,具备烧烤,加热..... ,找到这个光波炉这个对象,指挥你做事情
     光波炉对象.烧烤(){..........}


3. 什么是类
 |-- 是描述现实中对象的抽象,类就是描述对象的


    class Person{
      String name;
      int age;
      public void eat(){}
    }
    Person p = new Person();建立对象,相当于产生了一个现实生活中的人
    p.name = lisa;
    p.age = 20;


    Person p1 = new Person();
    p1.name = gaga;
    p1.age 23;


4. 成员变量的存储情况
  |-- 跟随对象,在堆内存中存储
  |-- 堆中的成员变量,都有默认值
  |-- 跟随对象的消失而消失




5. 封装
  |-- 隔离变化
  |-- 提高安全性,
  |-- 提高维护性
  |-- 面向对象的三大特征之一
  |-- private修饰符,最低权限,封装的一种形式,凡是被private修饰的成员,外面的类,访问不到的
  |-- 将类中的成员变量私有化,并对外提供公共的访问形式 
                             赋值set  取值get

6. 构造方法  *****
  |-- 必须和类名一模一样
  |-- 没有返回值,不需要写void
  |-- 构造方法,在建立对象的时候,运行一次,仅仅运行一次
  |-- 作用是,给对象中的成员变量进行初始化赋值
  |-- 构造方法,是可以进行重载的
  |-- 构造方法,是可以用权限修饰的
  |-- 每一个类,都有一个空参数的默认构造方法


7. this关键字
  |-- 表示本类对象的引用,换句话说,哪个对象调用的,this就表示哪个对象
  |-- 区分类中的成员变量和方法内部的局部变量重名的情况
  |-- this()语句,可以在构造方法之间进行调用


8. 成员变量和局部变量的区别  *****
  |-- 成员变量跟随对象,在堆内存中存储
  |-- 局部变量,跟随方法,在栈内存存储


  |-- 成员变量都有默认值
  |-- 局部变量,必须手动赋值


  |-- 成员变量跟随对象的消失而消失,生命相对较长
  |-- 局部变量,跟随方法的弹栈消失而消失,生命相对较短


  |-- 成员变量作用于整个类中
  |-- 局部变量作用于定义的大括号中 


9. 静态static
  |-- 成员变量,被static修饰,变成所有对象的共享数据了
      如果我们的程序中,假定有一个数据,是所有人共享的
  |-- 静态修饰的成员变量,可以直接类名调用
  |-- 被静态修饰的成员变量和成员方法,随着类加载而加载,方法区
  |-- 静态不能直接访问非静态,原因是静态的成员先于对象存在于内存中


10. 什么时候使用静态修饰呢?
  |-- 当对象中出现了共享数据的时候,就将这个成员变量使用static修饰
  |-- 什么时候将方法定义成静态的呢,当这个方法没有访问过对象的特有数据(非静态的),这个方法定义成静态


11. 静态使用注意事项
  |-- 静态不能直接访问非静态
  |-- 静态方法中不能写this,super
  |-- 由于静态的声明较长,建议少用


12. 实例变量(对象,非静态)和类变量(static)的区别  *****
  |-- 实例变量,跟随对象堆内存存储
  |-- 类变量,是随类的加载而加载


  |-- 实例变量,类变量,都有默认值
  |-- 实例变量,只能对象调用,类变量即可对象调用,也可以类名调用(强烈推荐)


  |-- 实例变量,跟随对象存储堆内存,比类变量进内存要晚些
  |-- 类变量优先于对象存在于内存中,生命周期最长




13. 继承 extends
  |-- 类与类之间产生了关系,继承关系
  |-- 好处:代码减少了,复用性提高
  |-- 好处:继承的出现,让类与类之间产生了关系,正是这个关系,导致了面向对象第三个特征多态
  |-- 建立子类对象的时候,子类有,就用子类的,子类没有,用父类的


14. 继承中成员变量的特点
  |-- super超级,表示父类的存储空间引用
  |-- 调用父类的成员变量,super.成员变量
  |-- 区分子类父类成员变量,重名的情况


15. 继承中成员方法的特点
  |-- 子类中出现了和父类一模一样的方法,子类重写了父类方法 override
  |-- 保证权限大于等于父类的权限
  |-- 扩展功能,继承父类,覆盖方法,沿袭父类功能,加入子类自己的新功能


16. 继承中构造方法特点
  |-- 子类中所有的构造方法,必须访问父类中构造方法,java中默认访问父类空参数的
  |-- 如何访问父类构造方法呢?super(参数列表)
  |-- this() super()能否共存


17. final关键字
  |-- 可以修饰成员变量,成员方法,局部变量
  |-- 被final修饰的变量,其实是一个常量,不能在修改值
  |-- 被final修饰的类,是一个最终类,没有子类了
  |-- 被final修饰的方法,是一个最终方法,不能再被重写了


18. 多态
  |-- 一个事物,具备的多种形态
     |-- 我 上班,雇员  我,商场,顾客,我在家,一家之主


  |-- 对象的多态性
    |-- 父类或者接口引用指向自己的子类对象
  |-- 弊端
    |-- 只能调用子类父类共有的方法


  |-- 记住:父类引用指向子类对象,调用子类父类中共有的方法,运行的是子类重写后的方法
            如果要是调用子类的特有方法,必须进行类型的转换 使用instanceof
   以后看到java中已有的功能(方法),参数都是定义的父类型,调用方法,传递子类型
    public boolean equals(Object obj)
    public Thread(Runnable target)


19. 多态的细节  *****
  |-- 非静态成员变量
    |-- 编译时期,参考引用型变量所属类中,有没有定义成员变量
       |-- 有编译通过,没有编译失败
     |-- 运行时期,参考引用型变量所属类中的成员变量


  |-- 静态成员变量
    |-- 编译时期,参考引用型变量所属类中,有没有定义静态成员变量
       |-- 有编译通过,没有编译失败
    |-- 运行时期,参考引用型变量所属类中的静态成员变量


  |-- 非静态成员方法
    |-- 编译时期,参考引用型变量所属类中,有没有定义这个成员方法
      |-- 有编译通过,没有编译失败
    |-- 运行时期,参考子类重写父类中的这个成员方法,如果子类没有重写,运行父类的


  |-- 静态成员方法
    |-- 编译时期,参考引用型变量所属类中个,有没有定义这个静态成员方法
      |-- 有编译通过,没有编译失败
    |-- 运行时期,参考引用型变量属于类中定义的这个静态成员方法


  简单的记:除了非静态成员方法以外,编译看左边,运行看左边
            只有非静态成员方法,编译看左边,运行看右边
      Fu  f = new Zi();
   编译和运行的时候,除了非静态成员方法以外,JVM静态绑定在父类引用上
   当运非静态成员方法的时候,JVM就会动态的绑定到子类对象中


20. 抽象类
  |-- 具有抽象方法的类
  |-- 抽象方法也是子类共性内容抽取出来的,但是抽取以后,父类对方法的具体执行就不清楚了
  |-- 关键字 abstract进行修饰


  |-- 抽象类不能创建对象
  |-- 需要子类继承抽象类,并覆盖全部抽象方法,建立子类对象
  |-- 如果子类只覆盖了部分抽象方法,子类还是一个抽象类




21. 接口
  |-- 定义使用interfase
  |-- 接口中的成员变量和成员方法,都有固定格式
        public abstract void show();
public static final int x = 10;
  |-- 接口是一个对外暴露的规则,需要子类实现(implements)接口,并重写所有抽象方法
  |-- 如果子类实现了接口,覆盖了部分抽象方法,这个子类还是一个抽象类


22. 继承和实现有区别
  |-- 类与类之间单继承
  |-- 类与接口之间多实现  class D extends C implements A,B
  |-- 继承父类后,父类中的非抽象方法,子类可以直接使用啊
  |-- 实现后,必须覆盖所有抽象方法
  |-- 多实现,避免了单继承的局限性


23. 抽象类和接口的区别
  |-- 抽象类需要子类继承覆盖全部抽象方法
  |-- 接口需要子类实现覆盖全部抽象方法


  |-- 抽象类中可以有普通方法,子类继承后直接使用
  |-- 接口中没有普通方法,子类实现后必须全部覆盖


  |-- 抽象类中有构造方法,可以对成员变量赋值
  |-- 接口中没有构造方法,定义的都是常量


  |-- 抽象类中,可以定义普通方法和成员变量
  |-- 接口中,只能定义常量和抽象方法


  |-- 抽象类是这个继承体系中最共性的内容,和子类之间是一个 is a关系
  |-- 接口是这个体系中扩展功能,和子类之间是一个 like a关系
    abstract 传智播客类{
       abstract study();
    }
    class java基础 extends 传智播客类 implements 抽烟{
       void study(){学java基础}
    }
    class c基础 extends 传智播客类{
       void study(){c语言}
    }


    interfact 抽烟{
      abstract void 吸烟();
    }


24. 接口的实例应用,主板与USB接口  ***** 接口与多态
  |-- USB接口,提供了规则,要求外界设备怎么做,但是不规定具体内容,具体的内容由子类覆盖说了算


25. 内部类,匿名内部类  记住格式
  |-- 调用内部类中的方法的格式
    A -- 内部类,内部类的方法,都是非静态:
      外部类名.内部类名 变量 = new 外部类对象().new 内部类对象();
                   变量.内部类方法();
    B -- 内部类,内部类的方法,都是静态:
      外部类名.内部类名.内部类方法();
    C -- 内部类静态,内部类的方法非静态:
       外部类名.内部类名 变量 = new 外部类名.内部类对象();
             变量.内部类方法();
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值