oop(Object Oriented Programming)面向对象编程
Day07:
1.接口
1)什么是接口?
接口是一个特殊的抽象类,接口和类平级,也是一个数据类型
2)为什么需要接口?
2.1)接口可以让java间接的实现多继承(实现类实现接口,子类继承父类)
2.2)接口约束了实现类的方法,提高了程序的可扩展性
2.3)方便程序设计者搭建程序框架(架构师)
3)如何编写一个接口
在一个java文件中,将class换成interface
4)接口的特性:(和抽象类不一样)
4.1)接口的属性都是公有静态常量:
所有属性默认被public static final修饰
4.2)接口的方法都是公有的抽象方法:
所有的方法默认都是被public abstract修饰
4.3)特殊的抽象类,所以接口不能实例化对象
4.4)接口没有构造方法
5)接口的实现
5.1)我们将实现接口的类叫做实现类
5.2)语法
class<类名>implements<接口>{
}
5.3)实现类实现接口时,需要实现接口中的所有的方法,除非实现类是抽象类
5.4)如果一个类实现多个接口的话,那么接口名用,分隔
5.5)如果这个类既继承了父类又实现了接口,那么这个类先写extends(继承),再写implements(实现)
5.6)父类是一种类型,接口是一种能力
子类继承父类满足is——a原则
实现类实现接口满足has——a原则
6)接口的注意事项:
6.1)使用向上造型,可以将对象赋给接口,但是接口类型只能调用到接口声明的方法
6.2)接口也可以继承接口,使用extends继承,多个接口的话,使用,分隔
实现类实现所有父类的接口
6.3)工作中的实际运用
面向接口编程(境界比较高。。。。)
PS.接口可以定义默认方法
2.抽象类和接口的区别
1)相同点:
不能实例化,可以编写抽象方法
2)不同点(站在接口的角度来说):
不能编写构造方法
不能编写实例成员
能多继承
所有属性都是常量,所有方法都是抽象方法
3)如果声明的是一种抽象的能力,使用的是接口
如果声明的是没有对象的类型,那么使用抽象类
Day08:
1.多态
1)什么是多态?
同一父类的不同子类对象对同一方法的调用,产生的不同的行为
2)为什么使用多态?
减少代码冗余,提高程序的可维护性和可扩展性
3)怎么使用多态?
3.1)定义一个父类
3.2)定义子类继承父类
3.3)子类重写父类的方法
3.4)子类对象赋给父类引用(向上造型)
3.5)使用父类引用调用子类重写后的方法
2.引用数据类型的强制类型转换
1)什么是类型转换
就是将一个数据类型的引用转换成另一个数据类型
2)为什么需要类型转换?
父类引用无法调用子类特有的成员,如果必须调用,则需要进行数据转换
3)怎么进行类型转换?
(<类型>)<引用>
比如:Cat c=(Cat)pet 然后c可以调用Cat类特有的成员
4)强制类型转换的注意事项:
如果将子类A的引用强转成子类B,会发生强制类型转换异常(ClassCastException),在强转之前,需判断一下引用对象的实际类型
3.instanceof运算符
1)什么是instanceof运算符
判断一个对象是否属于某个类型
2)为什么需要instanceof运算符
为了防止数据类型转换异常
3)如何使用instanceof运算符
格式:
<对象>instanceof<类型>
如:p instanceof Dog 运算结果输出的是boolean类型的结果
PS.封装:属性私有化,方法公有化,提高程序的安全性
Day09:
1.GC(Garbage Collection 垃圾回收管理机制)
1)什么是垃圾?
程序中那些使用完毕以后不会再使用的对象(主要存在于堆中)
2)为什么需要处理垃圾?
如果放任那些不再使用的对象存放在内存中的话,最终会发生内存溢出(内存泄漏),如果内存溢出,会将数据储存在硬盘上,然而计算机从硬盘上读取数据的速度很慢,内存溢出严重影响计算机的性能
3)怎么清理垃圾?
其他语言清理垃圾:
如C++:通过析构函数来释放对象(C++程序员需要花费精力来释放各种不再使用的对象)
java:GC——垃圾回收管理机制(不用使用析构函数)
2.java垃圾处理
1)什么是GC?
垃圾回收管理机制(可以将它想象成一个打工的小时工),是JVM中一条专门处理回收垃圾的线程(一个专门处理回收垃圾的程序)
2)GC的优缺点:
优点:java程序员不需要管理回收垃圾
缺点:1.GC本身是需要占运行内存的
2.GC回收垃圾是有延迟的
3.GC只处理java程序内容产生的垃圾
3.GC的回收原理:
GC判断对象是否是垃圾的时会综合多种方法来判断对象是不是垃圾,其中最核心的办法就是:引用计数法
如果希望一个局部变量尽快被回收,可以将它设置成null
4.Object类中的finalize方法(所有对象都会继承Object类中的finalize方法)在GC回收垃圾之前,会调用对象的finalize方法
5.System.gc();方法
由于GC时有延迟的,当我们想立即处理某个垃圾时,可以调用System.gc();通知GC尽快回收垃圾