二、面向对象
7、类的分类
1、实体类
类中的内容基本上都是成员函数或成员变量,也存在静态成员
2、工具类
提供已经被实现的功能,并向外部供应,基本上都是静态函数
运用静态的原因:
1)、共有
2)、存在时间长
3)、只需要加载一次,后续可随意使用
3、主类(测试类)
主要用于运行/测试代码,这个类中会有主函数的存在
实体类是可以存在主函数的
工具类一般不会存在主函数
8、 静态变量与成员变量的区别
1.生命周期
成员变量随着对象的创建而创建 随着对象的消亡而消亡
静态变量随着类的加载而创建 随着程序结束而消失
2.调用方式
成员变量必须先创建对象 在通过对象去调用
静态变量可以被对象调用 也可以直接用类调用
3.存储位置
成员变量存在于堆内存中对象的所属空间里
静态变量存在于静态方法区中类的所属空间里
4.命名
成员变量-对象的特有属性
静态变量-对象的共有属性 类成员
9、代码块
1、代码块:{。。。}
2、局部代码块:
存在于函数当中;for(){...} if(){...}
3、构造代码块:
直接在类中出现的{...}
当对象创建一次 构造代码块执行一次
作用:等同于构造函数
4、静态代码块:
直接在类中出现的static{...}
当类被加载的时候,仅且只执行一次
作用:对类进行一些初始化操作
10、单例模式
设计模式:就是我们的前辈们总结出来的一些编码技巧,它是由Java的广大使用者总结出来的一套编码经验,常见26种
单例模式:使用场景是 某一个类只能创建一个对象
1、只能创建一个对象 就得不能让外界去创建对象
2、外界不能创建对象 我们还得保证对象的创建
3、内部创建出对象 还得向外界提供
11、继承
继承由来是什么:
1、当我们在定义若干个类的时候,发现某一些类中具有相同的属性和行为那么,我们就可以将这些相同的部分进行抽取,独立生成另外一个类,那么这个生成出来的类我们称之为是父类,其他的被抽取内容的类称之为子类
2、子类与父类之间就是所谓的继承关系 用 extends来表示
子父类中成员变量/静态变量的特点:
如果只有子类有且非私有 那么就调用子类的
如果只有父类有且非私有 那么就调用父类的
如果子父类都有且非私有 那么就调用子类的
(成员变量之间 是不存在重写关系的!!!)
子类.属性 顺序:子类对象成员->子类静态->父类成员->父类静态
子类成员函数在内部调用变量时 局部变量->子类对象成员->子类静态->父类成员->父类静态
子父类中构造函数的特点:
1、现象:子类的构造函数在调用运行的时候 先执行父类的构造函数
2、 在子类的构造函数当中,有一句默认的super(...)隐藏了,而且这句代码必须是在第一行
3、对super的调用必须是构造器中的第一个
4、 this(...)是当前类中 本类构造函数调用本类构造函数的方式
5、super(...)是本类构造函数调用父类构造函数的方式
子父类中成员函数的特点:
如果只有子类有且非私有 那么就调用子类的
如果只有父类有且非私有 那么就调用父类的
如果子父类都有且非私有 那么就调用子类的(函数重写)
函数重写:在子父类中,同名函数
函数有什么组成:函数声明(权限 类型 返回值类型 函数名 参数列表)+函数体({}里面的内容)
重写的意义:
1.保留父类的功能声明 子类可以进一步优化
2.保留父类的功能声明 子类可以重新定义
重写当中应该注意到的一些细节:
1.函数重名 但是参数列表不同 不构成重写关系
2.函数重名 参数列表相同 构成重写关系 返回值类型也必须是一样的
3.子类重写父类函数时,权限>=父类权限
4.当然 如果父类函数权限为private 子类压根就继承不到 何谈重写
12、抽象类(模糊不清的类 不具体的类)
特点:
1、不能创建对象,对象本身是一个具体的东西 而抽象类中含有不具体的内容
2.必须作为父类,抽象类就等着被继承
3、抽象类就是一般类的特殊情况,唯一的区别只在于抽象类中有抽象函数
4、抽象类中不一定有抽象函数, AWT界面开发
13、多态(就是指一个对象可以有多种状态(他在继承体系中的位置变化))
多态当中 成员变量的特点:只能访问父类中的成员变量
多态当中 成员函数的特点:
1、如果子类没有重写 且父类中有 调用父类的
2、如果子类有重写 调用子类重写的
3、如果不存在重写 父类没有 那就报错了