java基础:13.2 接口,Comparable,Cloneable接口
2019-01-16 15:25
411 查看
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/L20902/article/details/86507078
1、接口的定义
接口只包含常量和抽象方法,接口在许多方面都与抽象类很相似,但是它的目的是指明相关或者不相关类的多个对象的共同行为。
与抽象类相似,不能使用new 操作符创建接口的实例。类和接口之间的关系称为接口继承。
[code]修饰符 interface 接口名{ 常量声明 方法签名 } //example abstract class Animal{ public abstract String sound(); //抽象方法 } class Chicken extends Animal implements Edible{ //实现了Edible 接口 ... @Override public String howToEat(){ return "chicken:fry it"; } @Override public String sound(){ //继承Animal 类并实现sound 方法 return "Chicken:cock-a-doodle-doo"; } class Tiger extends Animal{ ... } abstract class Fruit implements Edible(){ //Fruit 类实现Edible。 // 因为它不实现howToEat 方法,所以Fruit 必须表示为abstract ... } class Apple extends Fruit { //Apple 类和Orange 类实现howToEat 方法 @Override public String howToEat(){ return "orange:make orange juice"; } }
当一个类实现接口时,该类用同样的签名和返冋值类型实现定义在接口中的所有方法.
本质上,Edible 接口定义了可食用对象的公共行为。所有可食用的对象都有howToEat方法。
由于接口中所有的数据域都是public static final,所有的方法都是public abstract,所以java允许忽略这些修饰符。
2、Comparable接口
[code]package java.lang; public interface Comparable<E>{ public int compareTo(E o); } /* compareTo 方法判断这个对象相对于给定对象o 的顺序,并且当这个对象小于、等于或 大于给定对象o 时,分别返回负整数、0或正整数*/
Comparable 接口是一个泛型接口。在实现该接口时,泛型类型E 被替换成一种具体的类型。Java 类库中的许多类实现了Comparable 接口以定义对象的自然顺序。Byte、Short、Integer、Long、Float、Double、Character、Biglnteger、BigDecimalx Calendar、String以及Date 类都实现了Comparable 接口。
[code]public class Integer extends Number implements Comparable<Integer> { @Override public int compareTo(Integer o) .. } } System.out.println(new Integer(3).compareTa(new Integer(5))); System.out.println("ABC".compareTo("ABE")); java.util.Date date1 = new java.util.Date(2013,1,1); java.util.Date date2 = new java.util.Date(2012,1,1); System.out.println(datel.compareTo(date2));
3、Cloneable接口 [ java.lang ]
给出了一个可克隆的对象。
Cloneable接口是空的,不包括任何常量和抽象方法。实现Cloneable接口的类标记为可克隆的,这个类必须覆盖在Object类中定义的clone( )方法。
[code]Calendar calendar = new GregorianCalendar(2018,2,1); Calendar calendar1 = calendar; // 将calendar的引用复制给calendar1 Calendar calendar2 = (Clendar)calendar.clone(); // 克隆后对象的引用赋值给calendar2 // calendar和calendar2是内容相同 的 不同对象
引用:
[code]public class House implements Cloneable , Comparable<House> { private int id; private double area; ... public House(int id , double area ){ ...} ... @Override // 浅复制 public Object clone() throws CloneNotSupportedException { return super.clone(); } @Override // 深复制,和上一个只能二选一写。 public Object clone() throws CloneNotSupportedException { House houseClone() = (House)super.clone(); houseClone.whenBuilt = (java.util.Date)(whenBuilt.clone()); return houseClone; } @Override public int compareTo(House o){ ... return 1; ... return 0; } } // 创建 House house1 = new House(1, 1750); House house2 = (House)house1.clone();
创建
House house1 = new House(1, 1750);
House house2 = (House)house1.clone();
4、接口和抽象类
通常推荐使用接口,可以定义非相关类的共有父类,更灵活。
[code]public class NewClass extends BaseClass implements Interface1, ... ,InterfaceN{ } public interface NewInterface extends Interface1, ... ,InterfaceN{ } // NewInterface 为子接口
相关文章推荐
- Java 基础接口(Serializable、Cloneable、RandomAccess)
- java基础入门补充(002) Cloneable接口 深复制与浅复制
- Java 基础数据类型 和 深度克隆对象的2种方法(实现Cloneable接口或者实现对象序列化)
- Java 深拷贝、浅拷贝及Cloneable接口
- java cloneable接口及使用场景
- Java基础学习笔记(九)Comparable接口、Map接口、泛型
- Java中Cloneable接口的用法
- java 的对象拷贝(有深浅拷贝两种方式,深拷贝实现的两种方式(逐层实现cloneable接口,序列化的方式来实现))
- Java Cloneable接口与Serializable接口实现对象克隆和深度克隆
- Java:对象克隆(Clone)及Cloneable接口、Serializable接口详解
- java 重写接口Cloneable的Clone方法 拷贝对象
- 五星-原型模式常使用于以下场景--而JAVA中的任何类只要实现了Cloneable标识接口,就可以使用clone方法来进行对象的拷贝
- Java对象克隆(Clone)及Cloneable接口、Serializable接口的深入探讨
- java对象 深度克隆(不实现Cloneable接口)和浅度克隆
- Java对象克隆(Clone)及Cloneable接口、Serializable接口的深入探讨
- Java中Cloneable接口的用法
- Java对象克隆(Clone)及Cloneable接口、Serializable接口的深入探讨
- java中的Cloneable接口
- Java中的深克隆和浅克隆——Cloneable接口
- Java中Cloneable接口的用法