面向对象三大特征:
1)封装:
1.1)类:封装的是对象的属性和行为
1.2)方法:封装的是特定业务功能实现
1.3)访问控制修饰符:封装访问的权限
2)继承:
2.1)作用:代码的复用,减少代码的重复
2.2)超类:所有派生类所共有的属性和行为
接口:部分派生类所共有的行为
派生类:派生类所特有的属性和行为
2.3)单一继承、多接口实现
传递性
3)多态:
3.1)意义:行为的多态、对象的多态
3.2)向上造型、强制类型转换、instanceof
3.3)多态的表现形式:
3.3.1)重写:根据对象来实现多态
3.3.2)重载:根据参数来实现多态
1.内存管理:由JVM来管理
1)堆:
1.1)存储所有new出来的对象(包括实例变量)
1.2)垃圾:没有任何引用所指向的对象
垃圾回收器(GC)不定时到内存中去清扫垃圾
回收过程是透明的(看不到的),并不一定一发现
垃圾就立刻回收,可以调用System.gc()建议
虚拟机尽快调度GC来进行回收
1.3)内存泄漏:不再使用的内存还没有被及时的回收
严重的泄漏会导致系统的崩溃
建议:不再使用的对象及时将引用设置为null
1.4)实例变量的生命周期:
创建对象时存储在堆中,对象被回收时一并被回收
2)栈:
2.1)存储正在调用的方法中的所有局部变量(包括方法的参数)
2.2)在调用方法时为在栈中为该方法分配一块对应的栈帧,
栈帧中存储方法的局部变量以及方法的参数
当方法调用结束时,栈帧被清除,局部变量一并失效
2.3)局部变量的生命周期:
调用方法时存在栈中,方法结束时与栈帧一并被清除
3)方法区:
3.1)存储.class字节码文件(包括方法、静态变量)
3.2)方法只有一份,通过this来区分具体的对象
1.接口:
是一种数据类型(引用类型)
由interface定义,只能包含常量和抽象方法
不能被实例化,是需要被实现的,实现类:
必须重写接口中的所有抽象方法
一个类可以实现多个接口,用逗号分隔
若又继承又实现时,应先继承后实现
接口可以继承接口
接口只可以被public 和 abstract 修饰
2.多态:
1)意义:行为多态(抽象方法都是多态的)
对象多态(向上造型的对象都是多态的)
2)向上造型(自动类型转换):
超类型引用指向派生类的对象
能点出来什么,看引用的类型
能造型成: 超类+所实现的接口
3)强制类型转换,成功的条件只有如下两种:
3.1)引用所指向的对象,就是该类型
3.2)引用所指向的对象,实现了该接口
4)若不符合如上两个条件,则发生ClassCastException类型转换异常
建议:在强制之前先通过instanceof判断引用指向的对象是否是该类型
1.抽象方法:
1)由abstract修饰
2)只有方法的定义,没有方法具体的实现(连{}都没有)
2.抽象类:抽象类可以包含正常方法
1)由abstract修饰
2)包含抽象方法的类必须是抽象类
不包含抽象方法的类也可以声明为抽象类----我乐意
3)抽象类不能被实例化
4)抽象类是需要被继承的,派生类:
4.1)重写抽象类中的所有抽象方法--变不完整为完整
4.2)也声明抽象类------不常用
5)抽象类的意义:
5.1)封装所有派生类所共有的属性和行为--代码复用
5.2)为所有派生类提供了统一的类型------向上造型<