Core Java (十四) 接口,对象克隆,回调

释放双眼,带上耳机,听听看~!

接口

接口技术用来描述类具有什么功能,而并不给出每个功能的具体实现。

一个类可以实现一个或者多个接口,并在需要借口的地方,随时使用实现了相应接口的对象。

为了让类实现某个接口,通常需要:

  1. 将类声明为实现给定的接口
  2. 对接口中的所有方法进行定义

以下例子简单的实现了一个接口compareTo:


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
1package com.xujin;
2
3public class Main{
4   public static void main(String...args){
5       Employee e = new Employee("Lily", 1000);
6       System.out.print(e.compareTo(new Employee("Bob", 2000)));//1
7   }
8}
9
10class Employee implements Comparable<Employee>{
11  public Employee(String name, double salary){
12      this.name = name;      
13      this.salary = salary;      
14  }  
15 
16  public int compareTo(Employee other){
17      if(salary > other.salary) return -1;
18      if(salary < other.salary) return 1;
19      return 0;
20  }
21 
22  //定义变量
23  private double salary;
24  private String name;
25}
26

1
2
1  接口特性;
2

接口不是类,不能使用new实例化一个接口。但是可以声明接口的变量,Comparable x = new Employee();


1
2
3
1Comparable x = new Employee("Jim", 4000);//这里x是Employee类型的
2       System.out.println(x.getClass().getName());//com.xujin.Employee
3

1
2
1这样,创建的x是Employee类型的。
2

接口中可以包含非静态方法(public)和静态实例域(public static final)。

每个类虽然仅仅能够继承一个超类,但是可以实现多个接口。Java使用接口来实现多继承的大部分功能。


1
2
3
4
1class Employee implements Cloneable, Comparable{
2......
3}
4

对象克隆

深拷贝:对象克隆,又称为深拷贝。指的是创建一个新对象,且新对象的状态与原始对象的状态相同,当克隆的新对象修改时,不会影响原来的对象的状态。

浅拷贝:当拷贝一个变量的时候,原始变量与拷贝变量引用同一个对象,这是一种浅拷贝,拷贝出来的对象仍然会对原对象产生影响。

只有一个类实现了Cloneable接口才可以调用clone方法克隆。

如下例,staff是一个浅拷贝,而copy是一个深拷贝。


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
1package com.xujin;
2
3public class Main{
4   public static void main(String...args) throws CloneNotSupportedException{      
5       Employee a = new Employee("Lily", 1000);     
6      
7       Employee staff = a;//a与staff同时引用同一个对象
8       a.setName("Bob");
9       System.out.println(a);//com.xujin.Employee[name = Bob, salary = 1000.0]
10      System.out.println(staff);  //com.xujin.Employee[name = Bob, salary = 1000.0]
11     
12      Employee copy = a.clone();
13      a.setName("Jim");
14      a.setSalary(2000);
15      System.out.println(a);//com.xujin.Employee[name = Jim, salary = 2000.0]
16      System.out.println(copy);//com.xujin.Employee[name = Bob, salary = 1000.0]
17  }
18}
19
20class Employee implements Cloneable{
21  public Employee(String name, double salary){
22      this.name = name;      
23      this.salary = salary;      
24  }  
25 
26  public String getName(){
27      return this.name;
28  }
29 
30  public double getSalary(){
31      return this.salary;
32  }
33 
34  public void setName(String name){
35      this.name = name;
36  }
37 
38  public void setSalary(double salary){
39      this.salary = salary;
40  }
41 
42  public String toString(){  
43        return getClass().getName() + "[name = " + name + ", salary = " + salary + "]";  
44    }
45 
46  public Employee clone() throws CloneNotSupportedException{
47      return (Employee)super.clone();
48  }
49 
50  //定义变量
51  private double salary;
52  private String name;
53}
54

接口与回调

回调是一种常见的程序设计模式,可以指定某个特定事件发生时应该采取的动作。

如下例中,Timer类型的t可以在到达给定时间间隔的时候运行监听器listen中的actionPerformed方法。


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
1ackage com.xujin;
2
3import java.awt.Toolkit;
4import java.awt.event.ActionEvent;
5import java.awt.event.ActionListener;
6import java.util.Date;
7
8import javax.swing.JOptionPane;
9import javax.swing.Timer;
10
11public class Main{
12  public static void main(String...args){    
13      ActionListener listener = new TimePrinter();
14      Timer t = new Timer(1000, listener);
15      t.start();
16     
17      JOptionPane.showMessageDialog(null, "Quit?");
18      System.exit(0);
19  }
20}
21
22class TimePrinter implements ActionListener{
23  public void actionPerformed(ActionEvent event){
24      Date now = new Date();
25      System.out.println("At the tone,the time is " + now);
26      Toolkit.getDefaultToolkit().beep();
27  }
28}
29

给TA打赏
共{{data.count}}人
人已打赏
安全技术

bootstrap栅格系统自定义列

2021-12-21 16:36:11

安全技术

从零搭建自己的SpringBoot后台框架(二十三)

2022-1-12 12:36:11

个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索