`

java语言基础学习-----接口与对象克隆

阅读更多

一、接口

1.在java语言中,接口是一组对类的需求描述(规则协议),实现该接口的类必须遵循这一协议。

     an interface is not a class but a set of requirements for classes that want to conform to the interface

 

2.在接口中可以定义常量。但是接口中不能有实例域,也不能在方法中实现方法。

 

3.一个类实现一个接口,必须实现其中的所有方法。

 

4.在接口定义中,接口中的方法声明自动为public,实现此接口的类中的对应的方法必须声明为public的,不然编译器将认为该方法是包访问级别的。

 

5.Interfaces and Abstract Classes(接口和抽象类)比较

在abstract class方式中,抽象类中可以有自己的数据成员,也可以有非abstarct的成员方法,而在interface方式的实现中,接口中只能够有静态的 不能被修改的数据成员(也就是必须是static final的,不过在interface中一般不定义数据成员),所有的成员方法都是abstract的。从某种意义上说,interface是一种特殊 形式的abstract class。

   (1).一个类可以实现多个接口,但是只能继承一个(抽象)类

   (2).实现一个接口,必须实现所有的方法;相比,继承一个抽象类,不必实现所有的抽象方法,子类可以实现父类的个别抽象方法,不过这样的子类也是抽像类。

 

二、Object Cloning(对象克隆)

 

1.Copying and cloning

  

  

 

COPYING

 

Employee original = new Employee("John Public", 50000);
Employee copy = original;
copy.raiseSalary(10); // oops--also changed original

   CLONING

   Employee copy = original.clone();
   copy.raiseSalary(10); // OK--original unchanged

 

2.The default cloning operation is "shallow"—it doesn't clone objects that are referenced inside other objects.

 

 

 

 

 Does it matter if the copy is shallow? It depends. If the subobject that is shared between the original and the shallow clone is immutable, then the sharing is safe. This certainly happens if the subobject belongs to an immutable class, such as String. Alternatively, the subobject may simply remain constant throughout the lifetime of the object, with no mutators touching it and no methods yielding a reference to it.

如果对象是不改变的,那么这种共享是安全的,如String.

Quite frequently, however, subobjects are mutable, and you must redefine the clone method to make a deep copy that clones the subobjects as well. In our example, the hireDay field is a Date, which is mutable.如果对象是要改变的,那么就要自定义clone方法了。

For every class, you need to decide whether

  •  
    • The default clone method is good enough;
    • The default clone method can be patched up by calling clone on the mutable subobjects;
    • clone should not be attempted.

 

The third option is actually the default. To choose either the first or the second option, a class must

  •  
    • Implement the Cloneable interface, and
    • Redefine the clone method with the public access modifier.

 A subclass can call a protected clone method only to clone its own objects. You must redefine clone to be public to allow objects to be cloned by any method.

 子类只能调用受保护的clone方法克隆它自己。必须重新定义clone方法,才能够在任何方法中克隆对象。

 

 

Even if the default (shallow copy) implementation of clone is adequate, you still need to implement the Cloneable interface, redefine clone to be public, and call super.clone().

 都要实现Cloneable接口。

 

 1. import java.util.*;
 2.
 3. public class CloneTest
 4. {
 5.    public static void main(String[] args)
 6.    {
 7.       try
 8.       {
 9.          Employee original = new Employee("John Q. Public", 50000);
10.          original.setHireDay(2000, 1, 1);
11.          Employee copy = original.clone();
12.          copy.raiseSalary(10);
13.          copy.setHireDay(2002, 12, 31);
14.          System.out.println("original=" + original);
15.          System.out.println("copy=" + copy);
16.       }
17.       catch (CloneNotSupportedException e)
18.       {
19.          e.printStackTrace();
20.       }
21.    }
22. }
23.
24. class Employee implements Cloneable
25. {
26.    public Employee(String n, double s)
27.    {
28.       name = n;
29.       salary = s;
30.    }
31.
32.    public Employee clone() throws CloneNotSupportedException
33.    {
34.       // call Object.clone()
35.       Employee cloned = (Employee)super.clone();
36.
37.       // clone mutable fields
38.       cloned.hireDay = (Date)hireDay.clone();// deep clone
39.
40.       return cloned;
41.    }
42.
43.    /**
44.       Set the hire day to a given date
45.       @param year the year of the hire day
46.       @param month the month of the hire day
47.       @param day the day of the hire day
48.    */
49.    public void setHireDay(int year, int month, int day)
50.    {
51.       hireDay = new GregorianCalendar(year, month - 1, day).getTime();
52.    }
53.
54.    public void raiseSalary(double byPercent)
55.    {
56.       double raise = salary * byPercent / 100;
57.       salary += raise;
58.    }
59.
60.    public String toString()
61.    {
62.       return "Employee[name=" + name
63.          + ",salary=" + salary
64.          + ",hireDay=" + hireDay
65.          + "]";
66.    }
67.
68.    private String name;
69.    private double salary;
70.    private Date hireDay;
71. }

 

  • 大小: 18.6 KB
  • 大小: 26.7 KB
分享到:
评论

相关推荐

    Java语言程序设计-基础篇-中文ppt-第十四章.ppt

    总的来说,这一章涵盖了Java中面向对象编程的关键概念,包括抽象类的使用、接口的定义与实现、日期处理、事件处理、泛型、装箱与拆箱、大数运算以及自定义数据类型的设计。这些知识点都是编写复杂、灵活且可扩展的...

    java 对象克隆

    在Java编程语言中,对象克隆是一种创建一个与原对象具有相同数据的新对象的过程。对象克隆主要用于复制或备份对象,以便在不干扰原始对象的情况下对其进行修改或操作。本篇文章将详细探讨Java中的对象克隆及其实现...

    JAVA_对象克隆

    在Java编程语言中,对象克隆是一种创建与现有对象具有相同数据的新对象的过程。这个过程在需要复制对象的所有属性而不创建新类型实例时非常有用。本文将深入探讨Java中的对象克隆,包括其原理、实现方式以及注意事项...

    java 深克隆浅克隆

    在Java编程语言中,克隆是一种创建对象副本的方法,它允许我们复制一个对象并拥有一个完全独立的新实例,而不是仅仅引用原始对象。克隆技术在处理复杂数据结构、避免对象共享以及实现对象复制等方面有着广泛的应用。...

    Java对象的深克隆与浅克隆详解.zip(wcb2003)

    在Java编程语言中,克隆是一种创建对象副本的技术,它允许我们复制一个对象的状态而不影响原始对象。克隆主要用于创建对象的备份、实现复制功能或者在多线程环境中避免共享状态。Java提供了两种主要的克隆方式:浅...

    Java面试宝典2018-最全面试资料

    此外,书中还涉及了对象克隆(clone)的概念,这是Java中实现对象深度复制的技术。 Java SE语法是程序员必须掌握的基础,包括Java语言中的关键字和特殊符号的使用,例如“&”和“&&”的区别、goto语句的不存在、...

    factual-java-driver-1.6.2.zip

    Factual是一家提供全球数据服务的公司,其Java驱动程序允许开发者通过Java语言与Factual的数据平台进行交互。这个驱动程序可能包含API接口、示例代码、文档和必要的库,以便开发者能够轻松地查询和操作Factual的数据...

    java 深克隆 浅克隆

    在Java编程语言中,克隆是一种创建对象副本的方法,它允许我们复制一个对象并得到一个与原对象相同但独立的新对象。克隆分为两种主要类型:深克隆和浅克隆。理解这两种克隆的区别是Java面向对象编程中的重要概念。 ...

    JAVA浅克隆与深克隆

    在Java编程语言中,克隆是创建一个对象副本的过程,这个副本与原对象有相同的属性值,但作为不同的对象存在。克隆分为两种主要类型:浅克隆(Shallow Clone)和深克隆(Deep Clone)。这篇博客文章将探讨这两种克隆...

    java的深度克隆的例子

    在Java编程语言中,"深度克隆"是一个重要的概念,主要涉及到对象复制。深度克隆,也称为完全克隆,是指创建一个与原对象相同的新对象,不仅复制原对象的所有属性,还复制了原对象中引用的对象。这通常用于创建一个...

    java-java-lang包.pdf

    Java编程语言中的java.lang包是一个核心包,它提供了Java语言运行时的基础类库,包含了Java程序运行的基本数据类型、异常处理类以及一些用于系统级别的工具类和接口。java.lang包中的类和接口不需要程序员显示地导入...

    Java中的克隆(Clone)机制

    在Java编程语言中,克隆(Clone)机制是一种创建对象副本的方法,它允许开发者创建一个已有对象的新实例,这个新实例与原对象具有相同的属性值,但却是两个独立的对象,彼此的操作不会互相影响。克隆机制在某些情况...

    克隆和序列化(Java )

    在Java编程语言中,克隆和序列化是两个重要的概念,它们在数据处理和对象管理中扮演着关键角色。下面将分别对这两个概念进行详细解释,并结合实例和源代码进行阐述。 **一、克隆** 1. **克隆定义**:克隆是指创建...

    JAVA常用设计模式-追美眉技术详解.doc

    - **定义**: 定义一个创建对象的接口,但是让实现这个接口的类决定要实例化哪一个类。工厂方法让类的实例化推迟到子类。 - **应用场景**: 当系统中需要根据不同的输入产生不同的对象实例时。 - **优缺点**: 优点...

    clone 深度克隆对象

    "clone"方法就是用于复制对象的一种方式,尤其在Java等支持此功能的语言中。本文将深入探讨"深度克隆"这一概念,以及它与普通克隆的区别,并讨论其在实际应用中的优缺点。 深度克隆,也称为完全克隆,是一种创建新...

    Java面对对象实验(项目文件)2013521

    Java面向对象编程是Java语言的核心特性,也是软件开发中的重要概念。这个实验项目"Java面对对象实验(项目文件)2013521"旨在深入理解和掌握面向对象编程的基本概念,为后续学习JavaEE、JavaME等高级技术打下坚实的...

    aws-java-sdk-rds-1.11.44.zip

    "javalang"可能是指一个与Java语言相关的项目或者库,它可能是为了帮助理解和处理Java代码而设计的。而“RealJavaJava 8解析器”则可能是一个专门用于解析Java 8语法的工具或组件,用于分析、解释或者转换Java 8源...

Global site tag (gtag.js) - Google Analytics