- 如果一个子类继承了一个抽象父类,有两种解决方案;
- 方案1:作为抽象子类,不实现父类的抽象方法/实现部分抽象方法(子子孙孙愚公移山)
- 方案2:作为普通子类,实现抽象父类的【所有】抽象方法
Java 语言使用 final 关键字来定义一个常量
程序中几个类的内容重复率高—>冗余---->需要代码的重构----->解决方案(继承)
子类对象,对继承自父类的功能不满意—>override重写方法
将3个子类的特征与行为向上抽取形成父类,抽象是后天重构的结果
######################################################################
interface接口
接口实现类,命名规则—接口名Impl
通过这个关键字将接口实现类与接口关联起来
↓
class Inter2Impl implements Inter2{//implements–实现,+‘接口名’,
@Override
public void eat() {
}
@Override
public void play() {
}
}
接口:
接口实现类:
main方法:
######################################################################
object----java中所有类的顶级父类
如果一个类没有明确指定父类,那么它的父类就是顶级父类Object
既然接口实现类实现了接口,接口中又没有构造方法
那接口实现类构造方法中的第一行super()调用的是谁的构造方法?
答:使用的是默认继承的顶级父类Object中的无参构造
######################################################################
面向接口编程-好,能提前准备的就提前准备.
面向抽象编程-X,定义了一个abstract类 和 一个abstract 方法,再定义一个或几个abstract类的子
类,在子类中重写abstract类中的abstract方法(子类中重写的方法不再是abstract方法),然后就
可以只声明一个abstract类,再利用 上转型对象 对其重写的方法进行调用。
######################################################################
controler---->service--------->Dao(DB)
↓ ↓
前段 interface(order,car,各种接口及其指定的规范)
(业务层:接口+接口实现类)
↑ ↑ ↑
MVC Spring mybtis
<三层架构>//面试必涉及
接口:对接别人制定的规则,是一组规则的集合,它规定了实现本接口的类或接口必须拥有的一组规则。体现了自然界“如果你是……则必须能……”的理念。
######################################################################
接口可以继承多个接口,java是类只能继承唯一父类
一个类可以继承多个接口,极大扩展能力
- 之前我们学到:一个类只能有一个父类,这个是java的"单继承"
- 现在,一个类除了可以继承一个父类以外,还可以同时实现多个接口,叫"多实现"
######################################################################
总结/面试常考点:
1.类与类的关系
继承关系,只支持单继承
(如:class A extends B,A是子类,B是父类,子类具备父类的所有功能)
1.1子类不能使用父类的私有资源
1.2构造方法不能继承
1.3子类如果想更改父类的功能,可以重写(两同两小一大)
(注意:方法名+参数列表–方法签名)
*异常管道:子类抛出的异常类型 [不能>=]父类抛出的异常类型
2.类与接口的关系
实现关系,既可以单实现,也可以多实现
比如:class InterImpl implements Inter1{}
class InterImpl implements Inter2,Inter3{}
2.1InterImpl是实现类,Inter1,Inter2,Inter3是被实现的接口实现类去实现接口必须实现接口中声明的所有抽象方法,如果有任何一个没有实现,就得声明成抽象子类
2.2创建实现类对象时,一般使用实现类对象,而不是多态对象,因为效果一样.
3.接口与接口的关系
继承关系,既可以单继承,也可以多继承
比如:interface A extends Inter1{}
Interface A extends Inter2,Inter3(){}
A是子接口,inter1,inter2,inter3是被继承的父接口.
注意接口A2的实现类需要实现接口A2继承自Inter2和Inter3的所有抽象方法.
4.抽象类与接口的区别
4.1抽象类是一个特殊的类,使用class定义,特殊在这个类中可以定义没有方法体的方法(抽象方法)
4.2接口可以(理解成)一个特殊的抽象类,特殊在接口中所有的方法都是抽象方法
4.3抽象类中有构造方法,为了给子类创建对象时调用
4.4接口中没有构造方法的,子类调用的是父类的构造方法
4.5接口可以多继承,但抽象类只能单继承
4.6抽象类可以定义普通的成员变量,但接口只能定义静态常量
4.7接口与抽象类均不可实例化/创建对象
4.8抽象是后天重构的结果,接口是先天设计的结果
######################################################################
+--------------------------------------------------+
| |
| |
| OOP结束 |
| |
| |
+--------------------------------------------------+
######################################################################
API—别人写好的一些代码我们来用
API(Application Programming Interface,应用程序接口)是一些预先定义的函数。目的是提供应用程序与开发人员基于某软件可以访问的一些功能集,但又无需访问源码或理解内部工作机制的细节.
基础API(应用抽象接口)
高级API
父类∈超类的一种
三个object方法:toString,equals,hashcode
+-----------------------------------------------------------+
| |
| |
| |
| JDK_API 1.6.0中文版 |
| 点击主窗体,ctrl+F搜索,快速连点"下一步",能高效搜索目标内容 |
| |
| |
| |
+-----------------------------------------------------------+
######################################################################
Garbage Collection Machine//垃圾回收机制(GC)
删除垃圾文件–>内存管理
使用特定算法释放垃圾对象所占用的内存空间,使我们可以有效使用内存,这个过程称为GC
为什么学习–>
1.深入理解GC的工作机制
2.可以助自己写出更好的代码
3.
–>面试亮点
手动–>如果忘记释放对应的内存不能再次使用,C语音特点
内存泄漏:内存占着却不能使用
自动–>JAVA系统内存不足时会自动进行垃圾回收
GC判断策略
1.引用计算法(有漏洞)
2.可达性分析(需要短时间的线程暂停/称为STW全线暂停)
垃圾存在堆里,这里说的垃圾处理就是针对堆中的对象
伊甸园区
(复制算法,将伊甸园区的对象复制到存活区)(S0-S1中来回15次,如果某个对象经历15次轮转还活着,说明这个对象使用率非常高,而且来回会浪费资源,此时它会被转到老生带)
存活区
老生带(不再使用复制算法,改为<标记清除算法>,这也导致老生带中的存储不连续,零碎<内存碎片问题>)
(优化后为<标记整理算法>,效率是前者快因为少一步整理)
复制算法:好-简单高效;差:内存缩小一半,对象存活率高就不适用
标记清除算法: 内存碎片
标记整理算法: 好:没有碎片 差:效率低
GC
GC
总结–JAVA的一个特点(与C相比)
//当this调用本类构造器、super调用父类构造器时,不可以同时出现,也就是this()和super()不能同时出现
//项目教师有视频