Core Java (十四) 接口,对象克隆,回调
2013-01-22 22:36
441 查看
接口
接口技术用来描述类具有什么功能,而并不给出每个功能的具体实现。一个类可以实现一个或者多个接口,并在需要借口的地方,随时使用实现了相应接口的对象。
为了让类实现某个接口,通常需要:
将类声明为实现给定的接口
对接口中的所有方法进行定义
以下例子简单的实现了一个接口compareTo:
package com.xujin; public class Main{ public static void main(String...args){ Employee e = new Employee("Lily", 1000); System.out.print(e.compareTo(new Employee("Bob", 2000)));//1 } } class Employee implements Comparable<Employee>{ public Employee(String name, double salary){ this.name = name; this.salary = salary; } public int compareTo(Employee other){ if(salary > other.salary) return -1; if(salary < other.salary) return 1; return 0; } //定义变量 private double salary; private String name; }
接口特性;
接口不是类,不能使用new实例化一个接口。但是可以声明接口的变量,Comparable x = new Employee();
Comparable x = new Employee("Jim", 4000);//这里x是Employee类型的 System.out.println(x.getClass().getName());//com.xujin.Employee这样,创建的x是Employee类型的。
接口中可以包含非静态方法(public)和静态实例域(public static final)。
每个类虽然仅仅能够继承一个超类,但是可以实现多个接口。Java使用接口来实现多继承的大部分功能。
class Employee implements Cloneable, Comparable{ ...... }
对象克隆
深拷贝:对象克隆,又称为深拷贝。指的是创建一个新对象,且新对象的状态与原始对象的状态相同,当克隆的新对象修改时,不会影响原来的对象的状态。浅拷贝:当拷贝一个变量的时候,原始变量与拷贝变量引用同一个对象,这是一种浅拷贝,拷贝出来的对象仍然会对原对象产生影响。
只有一个类实现了Cloneable接口才可以调用clone方法克隆。
如下例,staff是一个浅拷贝,而copy是一个深拷贝。
package com.xujin; public class Main{ public static void main(String...args) throws CloneNotSupportedException{ Employee a = new Employee("Lily", 1000); Employee staff = a;//a与staff同时引用同一个对象 a.setName("Bob"); System.out.println(a);//com.xujin.Employee[name = Bob, salary = 1000.0] System.out.println(staff); //com.xujin.Employee[name = Bob, salary = 1000.0] Employee copy = a.clone(); a.setName("Jim"); a.setSalary(2000); System.out.println(a);//com.xujin.Employee[name = Jim, salary = 2000.0] System.out.println(copy);//com.xujin.Employee[name = Bob, salary = 1000.0] } } class Employee implements Cloneable{ public Employee(String name, double salary){ this.name = name; this.salary = salary; } public String getName(){ return this.name; } public double getSalary(){ return this.salary; } public void setName(String name){ this.name = name; } public void setSalary(double salary){ this.salary = salary; } public String toString(){ return getClass().getName() + "[name = " + name + ", salary = " + salary + "]"; } public Employee clone() throws CloneNotSupportedException{ return (Employee)super.clone(); } //定义变量 private double salary; private String name; }
接口与回调
回调是一种常见的程序设计模式,可以指定某个特定事件发生时应该采取的动作。如下例中,Timer类型的t可以在到达给定时间间隔的时候运行监听器listen中的actionPerformed方法。
ackage com.xujin; import java.awt.Toolkit; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.util.Date; import javax.swing.JOptionPane; import javax.swing.Timer; public class Main{ public static void main(String...args){ ActionListener listener = new TimePrinter(); Timer t = new Timer(1000, listener); t.start(); JOptionPane.showMessageDialog(null, "Quit?"); System.exit(0); } } class TimePrinter implements ActionListener{ public void actionPerformed(ActionEvent event){ Date now = new Date(); System.out.println("At the tone,the time is " + now); Toolkit.getDefaultToolkit().beep(); } }
相关文章推荐
- java对象 深度克隆(不实现Cloneable接口)和浅度克隆
- java 复制对象 (克隆接口 与 序列化)
- <CoreJava> 6.3 接口与回调
- Java学习笔记004——接口、克隆、回调、内部类
- Java对象克隆、了解标识接口
- Java 基础数据类型 和 深度克隆对象的2种方法(实现Cloneable接口或者实现对象序列化)
- java对象 深度克隆(不实现Cloneable接口)和浅度克隆
- java对象 深度克隆(不实现Cloneable接口)和浅度克隆
- java对象 深度克隆(不实现Cloneable接口)和浅度克隆
- java之实现Cloneable接口的详解,克隆一个对象--对应有浅克隆和深克隆,概念结合代码深入理解
- Java中接口对象实现回调
- (JAVA子类引用指象父类引用)JAVA克隆对象,包括父类属性,无需实现序列化接口
- Java中多态 / 上转型对象 和接口回调的对比
- java模拟接口回调
- java的接口回调
- java的接口回调
- java对象克隆
- Java回调接口的理解
- Java-6.2-接口回调
- Thinking in Java之接口回调改版