类与类之间的三种关系
1.is-a关系 -- 继承 --学生和人
2.has-a关系 -- 关联(聚合/合成) -- 扑克和一张牌
3.user-a关系 -- 依赖 -- 人和房子
类和它实现的接口直接的关系
1.play-a/like-a -- 扮演/看起来像
缺省适配模式
- 在使用接口时,必须实现接口中所有的方法,如果需要使用某个方法,则需要创建一个类(适配器)实现该接口,从而可以直接实现适配器,选择性重写需要的方法。
对于实现接口Java8新增
1.java8以后,接口可以进行默认实现,从而在实现接口后,可以选择行重写需要的方法。
public default name(){
此处省略10000行代码
}
2.如果一个接口中只有一个方法且没有默认实现,那么就可以使用如下方法(Lambda表达式/匿名函数:e ->{})。如给按钮添加监听器
okButton.addActionListener(e -> {
此处省略10000行代码
});
final/native
1.由final修饰的方法,子类不能在重写;
2.final修饰的类,不能被继承(即没有子类);
3.final修饰的变量,即为常量。
4.native修饰的方法,代表其是由C或C++实现的
对象的克隆
-- 如果一个对象在使用中如要多次创建,那么则可以使用对象克隆来增加效率
实现Cloneable接口,子类重写父类(Object)的clone方法
// 重写父类克隆的方法
@Override
public Object clone() {
Student temp = null;
try {
// 调用Object父类的clone(克隆)方法
temp = (Student) super.clone();
} catch (CloneNotSupportedException e) {
e.printStackTrace();
}
return temp;
}
数组排序(Arrays.sort())
- 排序的前提:
1.两个对象可以比较大小
2.需要实现Comparable接口,重写compareTo方法。
// 重写Comparable接口的compareTo方法
@Override
public int compareTo(Student o) {
/*
* 比较this和other谁大谁小(返回负数、0、正数)
* 后面减前面为升序(this.age-o.age)
* 前面减后面为降序(o.age-this.age)
*/
return this.age - o.age;// 升序
// return o.age - this.age;// 降序
// return o.name.compareTo(this.name); // 升序
// return this.name.compareTo(o.name);// 降序
}
模版方法设计模式
- 抽象类作为多个子类的通用模版,子类在抽象类的基础上进行扩展、改造,但子类总体上会保留抽象类的行为方式
- 解决问题
1.当功能内部一部分实现是确定的,一部分实现是不确定的,这时候就可以把不确定的内容暴露出来,让子类去实现。
2.编写一个抽象父类,父类提供了多个子类的通用方法,并把一个或多个方法留给其他子类实现,就是一种模版模式。
abstract class Template {
// 未确定部分
public abstract void code();
// 已确定部分
public void speedTimes() {
long start = System.currentTimeMillis();
code();
long end = System.currentTimeMillis();
System.out.println("运行时间:" + (end - start));
}
}
class SubTemplate extends Template {
@Override
public void code() {
for (int i = 2; i <= 100000; i++) {
boolean flag = true;
for (int j = 2; flag && j <= Math.sqrt(100000); j++) {
if (i % j == 0) {
flag = false;
}
}
if (flag) {
System.out.println(i);
}
}
}
}
网友评论