------- android培训、java培训、java学习型技术博客、期待与您交流! ----------
面向对象的复习(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 外部类名.内部类对象();
变量.内部类方法();