zoukankan      html  css  js  c++  java
  • java学习笔记(Core Java) 6接口与内部类

    接口(实现C++的多继承,同时避免了虚继承)
    深拷贝与浅拷贝
    内部类
    代理

    一、接口与泛型接口:提供一组行为规范
    public interface Comparable<T>
    {
    int compareTo(T other)
    }
    ...
    int conpareTo<Employee other> //指定T

    接口中所有的方法自动属于public
    所有的域自动为public staic
    接口中的域自动声明为 public static final

    继承接口的关键字:implements
    1.接口提供方法必须在子类实现
    2.接口中的方法没有方法体
    3.接口中不允许包含实例域或静态方法,但可以包含常量。接口中的域自动声明为 public static final
    4.接口不允许创建实例,但可以声明接口变量 Comparable x//也是正确的
    5.接口类变量必须实现引用接口的类对象 //基类指针指向子类对象
    可以使用instanceof判断一个对象是否实现特定接口

    //////////////////////////////
    java.lang.Comparable<T>

    int comparaTo(T other)//大于 正 ,等于 0, 小于负

    java.util.Arrays
    static void sort(Object[] a) //要求数组中的参数都必须实现了Comparable接口,并且是可以比较的

    java.lang.Integer
    static in compare(int x, int y)
    //////////////////////////////

    二、对象拷贝与克隆clone
    如果对变量进行简单的=,则两个变量引用同一个对象,所以更改一个必将引起另一个改变。如果要创建两个一样的新对象,就需要clone方法

    深拷贝与浅拷贝:
    clone是超类object中的protect方法,它并不清楚每个类的具体信息,只是对每个域进行相应的拷贝。如果类中一旦包含其他对象的引用的变量,那么经拷贝后的这两个变量将指向了同一个被引用的对象,即两个对象共享一个子对象,这并没有去clone一个完全独立的新对象,也就是,默认的clone是浅拷贝,没有克隆包含在对象中的对象。

    深拷贝需要重新定义clone方法(默认的为object中,且访问级别为protect)
    需要实现Clloneable接口,并将clone重新定义为public

    实现深拷贝,必须克隆所有可变域

    ⑴clone方法将对象复制了一份并返回给调用者。一般而言,clone()方法满足:
    ①对任何的对象x,都有x.clone() !=x//克隆对象与原对象不是同一个对象
    ②对任何的对象x,都有x.clone().getClass()= =x.getClass()//克隆对象与原对象的类型一样
    ③如果对象x的equals()方法定义恰当,那么x.clone().equals(x)应该成立。

    ⑵Java中对象的克隆

    ①为了获取对象的一份拷贝,我们可以利用Object类的clone()方法。
    ②在派生类中覆盖基类的clone()方法,并声明为public。
    ③在派生类的clone()方法中,调用super.clone()。
    ④在派生类中实现Cloneable接口。

    举例:
    public class Employee implements Cloneable
    {
    private String name;
    private Date hireDay; //引用对象
    ...
    public Employess clone() throw CloneNotSupportException //显示告诉编译器,如果类没有实现Cloneable接口,将抛出异常
    {
    Employee clone = (Employee)super.clone;//Object类clone方法将会产生新对象;

    clone.hireDay = (Date)hireDay.clone();//创建子对象

    return clone;
    }
    }

    ///////////////////////////////
    所有数组类型均包含一个clone方法并且是public,可以创建两个数据一样且独立的数组
    //////////////////////////////

    三、接口与回调函数 java回调与C#委托,函数指针,其实java和他俩还是有很大不同的
    //待保留

  • 相关阅读:
    解释器模式
    java-->Hashtable简单使用
    HashTable和HashMap区别
    享元模式
    Beanutils.copyProperties( )用法
    删除List集合中的元素方法
    Date中before和after方法的使用
    Spring定时任务@Scheduled注解使用方式
    Oracle中INSTR、SUBSTR和NVL的用法
    StringBuffer的delete方法与deleteCharAt方法的区别。
  • 原文地址:https://www.cnblogs.com/luckyQi/p/6782515.html
Copyright © 2011-2022 走看看