首页 > 编程 > Java > 正文

Java复习--接口、lambda表达式、内部类

2019-11-11 01:19:02
字体:
来源:转载
供稿:网友

参考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.lambda表达式

3.内部类

内部类,简单说就是在一个类中又新定义的类。

4.代理


上一篇:JAVA泛型2

下一篇:JAVA泛型2

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表