JAVA笔记【20131213】
来源:互联网 发布:医学外文文献数据库 编辑:程序博客网 时间:2024/05/29 04:18
一、接口
接口是一组对类的需求描述,也即可以理解为接口只是定义了一堆方法,但其自己不实现这些方法,具体如何实现交给需要实现接口的类去做。
定义接口
public interface Comparable<T>{int compareTo(T other);}
接口中的方法默认是public的。接口中不能有实例域和方法实现,但接口中可以有常量,并且默认是public static final的。
将类声明为实现了某个接口,需使用implements关键字。
public class Employee implements Comparable<Employee>{public int compareTo(Employee other);}
类实现了某个接口,在类里面,该方法需标明关键字public。
接口本身不是类,所以不能实例化接口,但可以声明接口变量,接口变量也可以引用实现了该接口的类对象。
Comparable tempC;
tempC = new Employee("zhangs",100);
与使用instanceof检查一个对象是否属于某一个类一样,也可以使用instanceof方法检查一个对象是否实现了某个接口
if(tempEmp instanceof Comparable){//......................}
类可以继承,接口也可以类似
public interface compTest extends Comparable{//..................}
一个类只能有一个超类,但可以实现多个接口。
import java.lang.reflect.*;import java.util.*;public class Test28{public static void main(String[] args){Employee[] staff = new Employee[3];staff[0] = new Employee("zhangs",200);staff[1] = new Employee("lisi",100);staff[2] = new Employee("wange",300);Arrays.sort(staff);for(Employee te:staff)System.out.println(te.toString());}}class Employee implements Comparable<Employee>{public Employee(String name,int id){this.name = name;this.id = id;nextId++;}public int compareTo(Employee other){if(this.id > other.id)return 1;if(this.id < other.id)return -1;return 0;}public String toString(){return getClass().getName() +"[name="+name+" id="+id+"]";}public String getName(){return name;}public void setName(String name){this.name = name;}public int getId(){return id;}public void setId(int id){this.id = id;}public float getSalary(){return salary;}public void setSalary(float salary){this.salary = salary;}public static int getNextId(){return nextId ;}private String name;private int id;private static int nextId = 0; private float salary ;}
二、接口与抽象类
接口与抽象类都不可以实例化。
但抽象类是类,而接口不是类。
抽象类使用关键字abstract修饰,接口使用interface。
抽象类中可以有实例域和具体方法,接口中不能。
一个类只能有一个父类,而可以实现多个接口。
像上面的Comparable接口,如果设置为抽象类,方法compareTo设置为抽象方法,那对于有些已经有一个父类的类,要再实现compareTo方法就不可能了,因为一个类不能有多个父类,但为接口就可以。
三、对象克隆
默认的克隆操作是“浅拷贝”,即该种拷贝并未拷贝包含在对象中的内部对象。
如果需要“深拷贝”,即拷贝一个副本的形式,就需要实现接口Cloneable。实现clone方法。
在Object类中clone方法是声明为Protected的,所以只能克隆Object对象本身。
接口Cloneable本身是没有方法的,它的存在只是为了做instanceof操作,即判断是否实现了该接口而已,这种接口被称为标记接口。
只要在clone方法中包含没有实现Cloneable接口的对象,就会抛出CloneNotSupportException。
import java.util.* ;public class Test29{public static void main(String[] args) throws CloneNotSupportedException{Employee original = new Employee("zhangs");original.setHireDay(2013,12,13);System.out.println(original.toString());Employee copy = original.clone();copy.setHireDay(2012,12,12);System.out.println(original.toString());System.out.println(copy.toString());}}class Employee implements Cloneable{public Employee(String name){this.name=name;}public Employee clone() throws CloneNotSupportedException{Employee emp = (Employee)super.clone();emp.hireDay = (Date)hireDay.clone();return emp;}public void setHireDay(int year,int month,int day){hireDay = new GregorianCalendar(year,month-1,day).getTime();}public String toString(){return getClass().getName() +"[name="+name+" hireDay="+hireDay+"]";}private String name;private Date hireDay;}
四、接口与回调
所谓回调就是在某个特定事件触发的时候应该采取的动作。
如javax.swing包中的Timer类,指定时间间隔,触发一个或者多个动作。
Timer类的构造方法 Timer(int delay,ActionListener listener),其中delay表示延迟时间,ActionListener是接口,表示需要采取的动作。
public interface ActionListener{void actionPerformed(ActionEvent event);}
到达指定间隔,就会执行actionPerformed方法。ActionEvent中包含事件信息,可以先不考虑。
此处我们可以传递一个实现了ActionListener接口的对象。
import java.util.* ;import javax.swing.*;import javax.swing.Timer;import java.awt.*;import java.awt.event.*;public class Test30{public static void main(String[] args){ActionListener act = new TimerPrint();Timer t = new Timer(10000,act);t.start();JOptionPane.showMessageDialog(null,"Quit Programe?");System.exit(0);}}class TimerPrint implements ActionListener {public void actionPerformed(ActionEvent e){Date now = new Date();System.out.println("now the time is "+now);Toolkit.getDefaultToolkit().beep();}}
执行结果:
- JAVA笔记【20131213】
- java笔记
- JAVA笔记
- java笔记
- java笔记
- JAVA笔记
- java笔记
- Java 笔记
- java笔记
- java 笔记
- java笔记
- java笔记
- java笔记
- Java笔记
- java笔记
- java笔记
- Java笔记
- java笔记
- LeetCode | Sort List
- android自定义控件--图片拖拽DragImageView
- IO端口和IO内存的区别及分别使用的函数接口
- linux下挂载移动硬盘(ntfs格式)
- AIX6.1_EBS R12 CLONE 50% completed RC-50004: Fatal: Error occurred in ApplyDatabase:
- JAVA笔记【20131213】
- 数组中只出现一次的数字
- java--监控--Apache,Resin,JVM状态监控
- HTML&JS 笔记(3)
- LeetCode | Binary Tree Postorder Traversal
- ntfs文件格式在redhat6.4中挂载
- 数据库字段操作
- 与硬件通讯---IO内存
- Insertion Sort List