Java复习--接口、代理
来源:互联网 发布:mac命令行终端 颜色 编辑:程序博客网 时间:2024/05/17 22:58
参考《Java核心技术 I》 做的笔记
1.接口
1.1.接口简单介绍
接口:简单地说就是类的需求描述,实现该接口的类都需要遵从接口描述的规则。
如,系统中的Comparable<T>
接口
public interface Comparable<T> { int compareTo(T another);}
需要注意的是:
1.接口中声明的方法默认都是public类型,所以可不用声明
2.接口中不能包含实例域和静态方法
3.实现该接口的子类必须实现接口声明的所有方法,具体实现逻辑由子类定义
例如,若要对学生类比较,可把学生类Student
实现Comparable<T>
接口(通过关键字implement
),在定义的时候实现compareTo()
方法
//实现Comparable接口,泛型指定为Studentclass Student implements Comparable<Student> { private String name; private int age; Student(String name, int age) { this.name = name; this.age = age; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } @Override public int compareTo(Student another) { //第一个参数减去第二个参数 return Double.compare(age, another.age); }}
main方法中:
public static void main(String[] args) { Student[] students = new Student[3]; students[0] = new Student("jack", 18); students[1] = new Student("tom", 22); students[2] = new Student("lili", 6); //传入数组,元素对象必须实现Comparable Arrays.sort(students); for (Student s : students) { System.out.print(s.getName() + "\n"); }}
结果:
lilijacktom
1.2.接口特性
1.接口不能实例化,但可以声明
xxx = new Comparable();//是错误的Comparable xxx;// 可以声明接口
2.可以使用instanceof
检查该类是否实现了某个接口
if(xxx instanceof Comparable){...}
3.接口也可以继承
public interface Walk { void run(double distance);}public interface Run extends Walk { //此句=public static final constant ... double RUN_MAX = 100;//接口不能包含实例域或静态方法,但可以包含常量 void run(double distance);}
4.一个类可实现多个接口(所以不能用抽象类,因为只能继承一个抽象类)
class Student implements Walk , Run{...}
1.3.java8中可以在接口中定义静态方法
public interface Walk { void run(double distance); //接口中定义静态方法 public static double getDistance(int minute, int speed) { return speed * minute; }}
接口中添加静态方法的好处就是,在需要添加新功能的时候,不需要在实现该接口的所有子类中都再添加方法,直接修改接口即可(自己写的接口而已→_→)
1.4.默认方法
可以为接口方法提供一个默认实现,使用关键字default
public interface Walk { void run(double distance); //default关键字,类实现该接口方法的时候默认实现的方法逻辑 default double getDistance(int minute, int speed) { return speed * minute; }}
默认方法最主要是为了向下兼容java版本,接口增添新功能的时候,较低的版本可能就无法正常运行,有了默认方法,低版本也可正常调用接口
1.5.Comparator接口
首先如下代码中,是普通的字符串数组比较,String
已经实现了Comparable
接口,所以可以直接用Arrays.sort()
方法,按照首字母的字典顺序排序。
代码:
public static void main(String[] args) { String[] strings = new String[4]; strings[0] = "a"; strings[1] = "cdfadfasfasdf"; strings[2] = "bd"; strings[3] = "nsegt"; Arrays.sort(strings); for (String s : strings) { System.out.print(s + "\n"); }}
结果:
abdcdfadfasfasdfnsegt
若此时要按照字符串长度来排序,显然更改String
内部实现Comparable
接口的的方法是不可能的,所以可以外部自己定义个排序的逻辑类,实现Comparator
(比较器)接口,只需实现其compare()
方法即可,如下
代码:
//实现Comparator接口class LengthCompartor implements Comparator<String> { @Override public int compare(String lhs, String rhs) { return lhs.length() - rhs.length(); }}
主函数调用:
LengthCompartor compartor = new LengthCompartor();Arrays.sort(strings, compartor);for (String s : strings) { System.out.print(s + "\n");}
结果:
abdnsegtcdfadfasfasdf
2.代理
- Java复习--接口、代理
- Java基础复习:接口
- JAVA接口-复习
- Java复习之接口
- java复习之动态代理
- java-代理模式的复习
- Java基础复习:Set接口
- Java基础复习:List接口
- Java基础复习:Map接口
- Java复习之Iterator接口
- Java复习之Map接口
- Java复习——接口
- Java复习之静态代理设计模式
- 复习代理
- java代理 InvocationHandler接口实现
- JAVA接口代理实现AOP
- java-接口/内部类/代理
- Java基础复习:Queue接口&&LinkedList
- c++调用c语言的so动态库
- c——名字查找
- 排序2:选择排序(选择排序+堆排序)
- Spark的Stage划分和task最佳位置算法
- 关于Myeclipse报错的问题:An error occurred while filtering resources
- Java复习--接口、代理
- Mac下Sublime Text3配置Python开发环境
- 【TIP_4】Intent传递对象,在Activity和Fragment中再获取是否为新对象
- 汇编 org
- python curses
- 裸机(Bare Metal)安装CoreOS
- eclipse 添加resin3.1.12
- 正则表达式入门教程(三)
- 亚像素级角点定位算法