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.代理

0 0
原创粉丝点击