java 核心技术卷一笔记 6 .1接口 lambda 表达式 内部类
6.1 接口不是类,是对类的一组需求的描述,这些类需要遵守接口描述的统一格式进行定义。例如:Arrays类中sort方法(可以对对象数组进行排序)前提是对象所属的类必须实现了Comparable 接口。
public interface Comparable
{
int compareTo(Object other)
}
Comparable
public interface Comparable<T>
{
int compareTo(T other)
}
Comparable泛型
接口的方法自动的属于public;接口中可以定义多个方法;可以定义常量;接口不能含有实例域;
实现接口:1)将类声明为实现给定的接口(implements);2)对接口中的所有方法进行定义。
comparaTo 方法实现
public int ComparaTo(Object otherObject)
{
Employee other (Employee) otherObject;
return Double.compare(salary, other.salary);
}
静态Double.compare方法(第一个参数<第二个参数,返回一个负数,二者相等,返回0,
comparaTo 方法 泛型实现
class Employee implements Comparable<Employee>{
public int ComparaTo(Employee other)
{
return Double.compare(salary, other.salary);
}
}
注意 Object 参数进行类型转换
为什么不在Employee类直接提供一个comparableTo方法呢?主要原因在于java是一种强类型(strongly typed)语言。在调用方法时编译器会检查这个方法是否存在。
package cc.openhome;
import java.util.Arrays;
public class JieKou {
public static void main(String[] args) {
// TODO code application logic here
Employee[] staff =new Employee[3];
staff[0] =new Employee("harry Hacker", 75000);
staff[1]=new Employee("Carl Cracker", 355000);
staff[2]=new Employee("Tony Tester", 228000);
Arrays.sort(staff);
for(Employee e:staff)
System.out.println("name="+e.getName()+",salarry="+e.getSalary());
}
}
class Employee implements Comparable<Employee>
{
private String name;
private double salary;
public Employee(String name,double salary)
{
this.name =name;
this.salary=salary;
}
public String getName()
{
return name ;
}
public double getSalary()
{
return salary;
}
public void raiseSalary(double byPercent)
{
double raise =salary*byPercent/100;
salary +=raise;
}
public int compareTo(Employee other)
{
return Double.compare(salary,other.salary);
}
}
name=harry Hacker,salarry=75000.0
name=Tony Tester,salarry=228000.0
name=Carl Cracker,salarry=355000.0
成功构建 (总时间: 0 秒)
run:
java 核心技术卷一笔记 6 .1接口 lambda 表达式 内部类的更多相关文章
- java 核心技术卷一笔记 6 .2接口 lambda 表达式 内部类
6.2 接口实例 6.2.1 接口与回调 在java.swing包中有一个Timer类,可以使用它在到达给定的时间间隔时发出通告,假如程序中有一个时钟,就可以请求每秒钟获得一个通告,以便更新时钟的表盘 ...
- java 核心技术卷一笔记 6 .1.接口 lambda 表达式 内部类
6.1.2 接口不是类,不能实例化一个接口:但是可以声明接口的变量:Comparable x; 接口变量必须引用实现了接口的类对象:x = new Employee(); 检查一个对象是否属于某 ...
- Java核心技术卷一 · 笔记(2)
目录 1.多态.动态绑定 2.覆盖 3.阻止继承:final 类和方法 4.抽象类(abstract修饰) 5. 4 个访问修饰符: 6.toString() 7.对设计继承关系很有帮助的建议 8.接 ...
- java 核心技术卷一笔记 6 .2.3 接口 lambda 表达式 内部类
6.2.3 对象克隆 Cloneable 接口,这个接口指示一个类提供了一个安全的clone方法.(稍作了解) 为一个对象引用的变量建立副本时,原变量和副本都是同一个对象的引用,任何一个变量改变都 ...
- java核心技术卷一笔记(1)
jdk是java开发工具包,里面包含了javac.jar.javadoc.java等工具,可以在bin目录中找到.有一个文件夹是jre,即jdk也包含了java运行环境.jre可单独安装,只是运行ja ...
- Java核心技术卷一 · 笔记(1)
目录 1.java的关键术语 2.==和equals 3.空串与 Null 串 4.构建字符串 5.封装 6.对象的三个主要特性 7.依赖(dependence).聚合(aggregation).继承 ...
- java核心技术卷一笔记(2)
---恢复内容开始--- 异常.断言 所有的异常都继承自Throwable类,异常包括已检查异常和未检查异常,应该抛出已检查异常,而未检查异常要么是不可控的(Error),要么是应该避免发生的(Run ...
- 【阅读笔记】Java核心技术卷一 #0
这是一篇备忘性质的读书笔记,仅记录个人觉得有用的知识点 本文作为一个目录索引,部分章节跳过 吐槽:此书中文翻译有不少地方不太通顺,这种情况我要把英文版对应的部分也读一遍才能明白(说实话,英文里的从句表 ...
- 对《Java核心技术卷一》读者的一些建议
<Java核心技术卷一>是唯一可以和<Java编程思想>媲美的一本 Java 入门书.单从技术的角度来看,前者更好一些.但上升到思想层面嘛,自然后者更好,两者的偏重点不同. 思 ...
随机推荐
- 第一篇:构建第一个SpringBoot工程
简介 spring boot 它的设计目的就是为例简化开发,开启了各种自动装配,你不想写各种配置文件,引入相关的依赖就能迅速搭建起一个web工程.它采用的是建立生产就绪的应用程序观点,优先于配置的惯例 ...
- python如何实现相对导入
如果python中导入的package或module不在环境变量PATH中,可以使用sys.path将要导入的package或module加入到PATH环境变量中,之后便能使用相对导入方法. 拿hom ...
- 激光SLAM
1.激光分类 维度分类: a.二维激光(单点反射.平面.旋转台) b.三维激光 距离分类: a.近距离:壁障.碰撞检测.路边检测 b.远距离:行人检测.定位.建图 特点: 优点: a.可以直接获取深度 ...
- Linux 静态库 & 动态库
转自:http://blog.chinaunix.net/uid-26833883-id-3219335.html 一.什么是库 本质上来说库是一种可执行代码的二进制形式,可以被操作系统载入内存执 ...
- 支持lua的框架和ide
1.Kony http://mobilehub.io/products/kony 2.CryEngine http://mobilehub.io/products/cryengine 3.Dragon ...
- HDU - 1241 POJ - 1562 Oil Deposits DFS FloodFill漫水填充法求连通块问题
Oil Deposits The GeoSurvComp geologic survey company is responsible for detecting underground oil de ...
- 阻塞调用ShellExecute函数
SHELLEXECUTEINFO si;ZeroMemory(&si, sizeof(si));si.cbSize = sizeof(si);si.fMask = SEE_MASK_NOCLO ...
- HDU2489【状压枚举】
题意: 给你n个点的图,然后让你在图里挑m个点,达到sumedge/sumnode最小 思路: 由于数据范围小,状压枚举符合m个点的状态,我是用vactor存了结点位置,也记录了结点的sum值,然后跑 ...
- 微信小程序取消button边框线
先给button定义个class属性 <button class="an"> 按钮 </button> 然后再css上加上 .an::after { bor ...
- 如何实现一个无边框Form的移动和改变大小(二)
接着上文:这里写链接内容 我们来说说一个比较复杂的实现, 效果如图: 注意为了能够凸显没有NC(NotClient)区域,我们额外用了3个panel分别放在窗体的左右和下部.用来模拟客户自己的控件. ...