资源描述
单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,楚雄师范学院计算机科学系 java程序设计课程,*,/138,Java,程序设计,第,9,章 抽象与接口,学习目标,1.,理解抽象类和抽象方法基本概念,掌握抽象类的创建方法,;(,重,难,),2.,能使用,Calender,类和,GregorianCalendar,类处理日历,;,3.,理解接口基本概念及其作用,能使用接口进行程序设计;,(,重,难,),4.,能使用,Comparable,接口定义自然顺序,;(,难,),5.,能使用,Cloneable,接口克隆对象,;(,难,),2,楚雄师范学院计算机科学系 java程序设计课程,学习目标,6.,能使用包装类将基本类型数据值包装为对象,7.,能用,ArrayList,实现,Stack,类,;(,重,),3,楚雄师范学院计算机科学系 java程序设计课程,内容摘要,9.1,引言,9.2,抽象类,9.3,日历类,Calender,和公历类,GregorianCalendar,9.4,接口,9.5,将基本数据类型值处理为对象,4,楚雄师范学院计算机科学系 java程序设计课程,内容摘要,9.6,基本类型和包装类之间的自动转换,5,楚雄师范学院计算机科学系 java程序设计课程,内容摘要,9.1,引言,9.2,抽象类,9.3,日历类,Calender,和公历类,GregorianCalendar,9.4,接口,9.5,将基本数据类型值处理为对象,6,楚雄师范学院计算机科学系 java程序设计课程,9.1,引言,在类的继承层次结构中,随着各新子类的出现,类变得越来越专门和具体,.,如果从一个子类上溯到父类,类就变得更一般、更通用,.,有时把一个父类设计得非常抽象,以至于它没有具体的实例,这样的类称为,抽象类,(abstract class).,有时需要从几个类派生出一个子类,这种能力称为,多重继承,(multiple inheritance).,然而,Java,不能支持多重继承,.Java,的每个子,7,楚雄师范学院计算机科学系 java程序设计课程,9.1,引言,类都都是仅从一个父类直接继承,这种限制称为称为,单重继承,(single inheritance).,如果用关键字,extends,定义子类,它只允许有一个父类,.,如果使用接口,可以得到多重继承的效果,.,本章介绍抽象类和接口,并讨论如何使用基本数据类型值的包装类,.,8,楚雄师范学院计算机科学系 java程序设计课程,内容摘要,9.1,引言,9.2,抽象类,9.3,日历类,Calender,和公历类,GregorianCalendar,9.4,接口,9.5,将基本数据类型值处理为对象,9,楚雄师范学院计算机科学系 java程序设计课程,9.2,抽象类,在前一章中,GeometricObject,类声明成,Circle,类和,Rectangle,类的父类,它模拟了几何对象的共同特征,.,为了计算圆和矩形的面积和周长,Circle,和,Rectangle,都包含,getArea,(),和,getPerimter,(),方法,.,因为要计算所有集合对象的面积和周长,所以,最好在,GeometricObject,类中声明,getArea,(),和,getPerimter,(),方法,但是,这些,10,楚雄师范学院计算机科学系 java程序设计课程,9.2,抽象类,方法不能在,GeometricObject,类中实现,因为它们的实现取决于几何对象的具体类型,.,这样的方法称为,抽象方法,.,当在,GeometricObject,类中声明这些方法后,GeometricObject,类就成为一个抽象类,.,新的,GeometricObject,类如图,10-1,所示,.,在,UML,图形记号中,用斜体表示抽象类及其抽象方法的名称,如图,10-1,所示,.,11,楚雄师范学院计算机科学系 java程序设计课程,9.2,抽象类,12,楚雄师范学院计算机科学系 java程序设计课程,9.2,抽象类,13,楚雄师范学院计算机科学系 java程序设计课程,9.2,抽象类,14,楚雄师范学院计算机科学系 java程序设计课程,9.2,抽象类,15,楚雄师范学院计算机科学系 java程序设计课程,9.2,抽象类,16,楚雄师范学院计算机科学系 java程序设计课程,9.2,抽象类,下列给,GeometricObject,类新的程序清单,:,package ch9;,public abstract class,GeometricObject,private String color=white;,private,boolean,filled;,private,java.util.Date,dateCreated,;,/*,创建一个默认几何对象*,/,public,GeometricObject,(),dateCreated,=new,java.util.Date,();,17,楚雄师范学院计算机科学系 java程序设计课程,9.2,抽象类,/*Return color*/,public String,getColor,(),return color;,/*Set a new color*/,public void,setColor(String,color),this.color,=color;,18,楚雄师范学院计算机科学系 java程序设计课程,9.2,抽象类,/*Return filled.Since filled is,boolean,so,the get method name is,isFilled,*/,public,boolean,isFilled,(),return filled;,/*Set a new filled*/,public void,setFilled(boolean,filled),this.filled,=filled;,19,楚雄师范学院计算机科学系 java程序设计课程,9.2,抽象类,/*Get,dateCreated,*/,public,java.util.Date,getDateCreated,(),return,dateCreated,;,/*,返回该对象的一个字符串,*,/,public String,toString,(),return created on +,dateCreated,+,ncolor,:+color+and filled:+filled;,20,楚雄师范学院计算机科学系 java程序设计课程,9.2,抽象类,public abstract double,getArea,();,public abstract double,getPerimeter,();,抽象类和常规类一样具有数据和方法,但是不能用,new,操作符创建它的实例,.,抽象方法只有方法签名而没有实现,它的实现由子类提供,.,包含抽象方法的类必须声明为抽象类,.,注意,1:,非抽象类不能包含抽象方法,;,如果一个抽象类的子,21,楚雄师范学院计算机科学系 java程序设计课程,9.2,抽象类,类不能实现所有的抽象方法,它也必须声明为抽象类,.,换言之,在一个由抽象类扩展出来的非抽象类中,所有的抽象方法都必须实现,即使这个子类不使用它们,注意,2:,抽象方法是非静态的,注意,3:,抽象类不能用,new,操作符实例化,但仍然可以定义它的构造方法,这种构造方法将在它的子类中调用,抽象,4:,包含抽象方法的类必须是抽象的,但允许声明没有抽象方法的抽象类,.,这种情况下,不能用,new,操作符,22,楚雄师范学院计算机科学系 java程序设计课程,9.2,抽象类,创建类的实例,这种类用于定义新子类,注意,5:,子类可以声明为抽象类,即使它的父类是非抽象类,注意,6:,子类可以覆盖它父类的方法,将其声明为,abstract.,这种处理方法非常少用,但是当父类中方法的实现在子类中无效时,这种方法就有用了,.,这种情况下,子类必须声明为抽象类,抽象,7:,虽然不能用,new,操作符创建抽象类的实例,但是,抽象类可以用着数据类型,.,因此,下面的语句是正确的,23,楚雄师范学院计算机科学系 java程序设计课程,9.2,抽象类,它创建了一个元素是,GeometricObject,对象,:,GeometricObject,ob=new GeometricObject10;,实例,:,使用,GeometricObject,类,例子给出一个程序,创建两个几何对象,一个圆和一个矩形,.,用,equalArea,方法检查两个对象是否有相同的面积,调用,displayGeometricObject,方法显示这些对象,:,24,楚雄师范学院计算机科学系 java程序设计课程,9.2,抽象类,package ch9;,public class,TestGeometricObject,public static void,main(String,args,),GeometricObject,geoObject1=new Circle(5);,GeometricObject,geoObject2=new Rectangle(5,3);,System.out.println,(,这两个对象具有相同面积吗?,+,equalArea(geoObject1,geoObject2),);,25,楚雄师范学院计算机科学系 java程序设计课程,9.2,抽象类,displayGeometricObject(geoObject1);,displayGeometricObject(geoObject2);,public static,boolean,equalArea,(,GeometricObject,object1,GeometricObject,object2),return object1.getArea()=object2.,getArea,();,26,楚雄师范学院计算机科学系 java程序设计课程,9.2,抽象类,public static void,displayGeometricObject,(,GeometricObject,object),System.out.println,();,System.out.println,(,面积为,+object.,getArea,();,System.out.println,(,周长为,+object.,getPerimeter,();,27,楚雄师范学院计算机科学系 java程序设计课程,9.2,抽象类,注意,1:,如果,GeometricObject,里没有定义,getArea,和,getPerimeter,方法,就不能在该程序中定义,equalArea,和,displayObject,方法,下面我们看一下没有定义,getArea,和,getPerimeter,方法的,GeometricObject,类时程序运行情形,所以,现在可以看出在,GeometricObject,类中定义抽象方法的好处,.,注意,2:,28,楚雄师范学院计算机科学系 java程序设计课程,9.2,抽象类,如果,GeometricObject,里没有定义,getArea,和,getPerimeter,方法,而又要在该程序中定义,equalArea,和,displayObject,方法,则必须判断其中对象是具体哪一种并进行类型强制转换,:,package ch9;,public class TestGeometricObject1,public static void,main(String,args,),29,楚雄师范学院计算机科学系 java程序设计课程,9.2,抽象类,GeometricObject,geoObject1=new Circle(5);,GeometricObject,geoObject2=new Rectangle(5,3);,System.out.println,(,这两个对象具有相同面积吗?,+equalArea(geoObject1,geoObject2);,displayGeometricObject(geoObject1);,displayGeometricObject(geoObject2);,30,楚雄师范学院计算机科学系 java程序设计课程,9.2,抽象类,public static,boolean,equalArea,(,GeometricObject,object1,GeometricObject object2),boolean,rslt,=true;,if(object1,instanceof,Circle)&(object2,instanceof,Circle),rslt,=(Circle)object1).getArea()=(Circle)object2).getArea();,if(object1,instanceof,Rectangle)&(object2,instanceof,Rectangle),rslt,=(Rectangle)object1).getArea()=(Rectangle)object2).getArea();,31,楚雄师范学院计算机科学系 java程序设计课程,9.2,抽象类,if(object1,instanceof,Circle)&(object2,instanceof,Rectangle),rslt,=(Circle)object1).getArea()=(Rectangle)object2).getArea();,if(object1,instanceof,Rectangle)&(object2,instanceof,Circle),rslt,=(Rectangle)object1).getArea()=(Circle)object2).getArea();,return,rslt,;,32,楚雄师范学院计算机科学系 java程序设计课程,9.2,抽象类,public static void,displayGeometricObject,(,GeometricObject,object),System.out.println,();,if(object,instanceof,Circle),System.out.println,(,面积为,+(,Circle)object,).,getArea,();,System.out.println,(,周长为,+(,Circle)object,).,getPerimeter,();,33,楚雄师范学院计算机科学系 java程序设计课程,9.2,抽象类,if(object,instanceof,Rectangle),System.out.println,(,面积为,+(Rectangle),object).getArea,();,System.out.println,(,周长为,+(Rectangle),object).getPerimeter,();,34,楚雄师范学院计算机科学系 java程序设计课程,内容摘要,9.1,引言,9.2,抽象类,9.3,日历类,Calender,和公历类,GregorianCalendar,9.4,接口,9.5,将基本数据类型值处理为对象,35,楚雄师范学院计算机科学系 java程序设计课程,9.3,日历类和公历类,前面进过的,java.util.Date,实例表示以毫秒为单位的时刻。而日历类,java.util.Calendar,是一个抽象的父类,可以分解出日历的详细信息,如年、月、日、时、分和秒等。,Calendar,类的子类可以实现特定的日历系统,如公历,Gregorian,、阴历和,Jewish,历等。,目前,,java,支持公历类,java.util.GregorianCalendar,如图所示:,36,楚雄师范学院计算机科学系 java程序设计课程,9.3,日历类和公历类,37,楚雄师范学院计算机科学系 java程序设计课程,9.3,日历类和公历类,使用,new,GregorianCalendar,(),可以利用当前时间构造一个默认的,GregorianCalendar,对象,使用,new,GregorianCalendar(year,month,date),可以利用指定的年,year,、月,month,、和日,date,构造一个,GregorianCalendar,对象,其中,month,是从,0,开始计数的,即,0,就是,1,月,(,january,),定义在,Calendar,类中的,get(int,field),方法用来提取给定时间域的值,时间域定义为常量,如:,38,楚雄师范学院计算机科学系 java程序设计课程,9.3,日历类和公历类,YEAR,、,MONTH,、,DATE,、,HOUR(12,小时制,),、,HOUR_OF_DAY(24,小时制,),、,MINUTE,、,SECOND,、,DAY_OF_WEEK(,当前星期的天数,星期日是,1),、,DAY_OF_MONYH(,当前月的天,),、,DAY_OF_YEAR(,当前年的天数,1,是一年的第一天,),、,WEEK_OF_MONTH(,当前月内的星期数,),和,WEEK_OF_YEAR(,当前年内的星期数,),。,例如,下列代码:,java.util.Calendar,calendar=new,java.util,.,GregorianCalendar,();,System.out.println(“YeartMonthtDate,39,楚雄师范学院计算机科学系 java程序设计课程,9.3,日历类和公历类,tHourtHour24tMinutetSecond”);,System.out.println(calendar.get(Calendar.YEAR)+”t”+calendar.get(Calendar.MONTH)+”t,”+,calendar.get(Calendar.DATE)+”t,”+,calendar.get(Calendar.HOUR)+”t,”+,calendar.get(Calendar.HOUR_OF_DAY)+”t,”+,calendar.get(Calendar.MINUTE)+”t,”+,calendar.get(Calendar.SECOND,);,40,楚雄师范学院计算机科学系 java程序设计课程,内容摘要,9.1,引言,9.2,抽象类,9.3,日历类,Calender,和公历类,GregorianCalendar,9.4,接口,9.5,将基本数据类型值处理为对象,41,楚雄师范学院计算机科学系 java程序设计课程,9.4,接口,接口,(interface),是一种特殊的类,只包含常量和抽象方法。其定义的语法格式为:,interface,/*,常量声明*,/,/*,方法签名*,/,42,楚雄师范学院计算机科学系 java程序设计课程,9.4,接口,接口与抽象类相比:,1.,相似之处:,1),都不能使用,new,操作符创建实例;,2),都可以用来扩展类,此时,子类都能继承它们的成员,并且子类有责任实现它们的抽象方法,.,2.,不同之处,:,1),至多只能有一个抽象类来扩展子类,而可以用多个接口来扩展一个子类,;,43,楚雄师范学院计算机科学系 java程序设计课程,9.4,接口,2),接口只包含有常量和抽象方法,且抽象方法不用使用,abstract,关键字,而抽象类还可以包含其它变量和非抽象方法,;,3),用抽象类来扩展子类时,使用,extends,关键字,而用接口来扩展子类时,使用,implements,关键字,其格式为,:,class extends,implements,.,/*,类定义语句*,/,44,楚雄师范学院计算机科学系 java程序设计课程,9.4,接口,接口究竟用来干什么,java,为什么要引入接口,?,前述的抽象类是用来表示,较强的,”,是一个,(,种,)”,关系,而接口则用来表示,较弱的,”,是一个,(,种,)”,关系,它们都是用来表示各类关联事物,(,类,),的共同特性,反过来,描述各类关联事物,(,类,),时可以使用抽象类和接口来扩展,.,另外,接口可以实现多继承,.,45,楚雄师范学院计算机科学系 java程序设计课程,9.4,接口,下面我们来例子,.,在,java.lang,中定义有一个接口,:Comparable,其定义如下,:,package,java.lang,;,public interface Comparable,public,int,compareTo(Object,);,46,楚雄师范学院计算机科学系 java程序设计课程,9.4,接口,此接口强行对实现它的每个类的对象进行整体排序。此排序被称为该类的,自然排序,,类的,compareTo,方法被称为它的,自然比较方法,。,int,compareTo(Object,);,比较此对象与指定对象的顺序。如果该对象小于、等于或大于指定对象,则分别返回负整数、零或正整数。,47,楚雄师范学院计算机科学系 java程序设计课程,9.4,接口,强烈推荐,:,(,pareTo(y,)=0),等价于,(,x.equals(y,),在,java,类库中,有许多类,(,如,String,和,Date),实现了,Comparable,接口,定义对象的自然顺序,.,如果查看这些类源代码,会发现这些类使用了关键字,implements,如下所示,:,public class String extends Object,implements Comparable,/*,类体*,/,48,楚雄师范学院计算机科学系 java程序设计课程,9.4,接口,public class Date extends Object,implements Comparable,/*,类体*,/,49,楚雄师范学院计算机科学系 java程序设计课程,9.4,接口,所以,这些字符串是可比较的,日期也是可比较的,.,设,s,为,String,对象,d,为,Date,对象,以下所有表达式都有是正确的,:,s,instanceof,String,s,instanceof,Object,s,instanceof,Comparable,d,instanceof,Date,d,instanceof,Object,d,instanceof,Comparable,50,楚雄师范学院计算机科学系 java程序设计课程,9.4,接口,下面我们来看找出最大者的一般方法,max,它可以声明为两种方式,:,方式,1:,public class Max,public static Comparable max(,Comparable o1,Comparable o2),if(pareTo(o2)0),return o1;,else,return o2;,51,楚雄师范学院计算机科学系 java程序设计课程,9.4,接口,方式,2:,public class Max,public static Object,max(Object,o1,Object o2),if(Comparable)o1).compareTo(o2)0),return o1;,else,return o2;,52,楚雄师范学院计算机科学系 java程序设计课程,9.4,接口,以后,我们默认采用方式,1.,这样,只要是,Comparable,对象均可以使用,:,String s1=“,abcdef,”;,String s2=“,abcdee,”;,String s3=(String)Max.max(s1,s2);,Date d1=new Date();,Date d2=new Date();,Date d3=(Date)Max.max(d1,d2);,53,楚雄师范学院计算机科学系 java程序设计课程,9.4.1,声明类以实现,Comparable,接口,如果一个类,C1,的实例要使用,max,方法得到较大的一个,那么就要在该类中实现,Comparable,接口,即它应有如下关系,:,54,楚雄师范学院计算机科学系 java程序设计课程,9.4.1,声明类以实现,Comparable,接口,此时,可以有如下语句,:,C1,c1,=new C1();,C1 c2=new C1();,C1 c3=(C1)Max.max(c1,c2);,例如,我们现在在,Rectangle,中来实现接口,Comparable,这样就可以使用,max,来从它的两个实例中返回较大的一个,.,程序清单如下,:,55,楚雄师范学院计算机科学系 java程序设计课程,9.4.1,声明类以实现,Comparable,接口,package ch9;,public class Rectangle extends,GeometricObject,private double width;,private double height;,public Rectangle(),56,楚雄师范学院计算机科学系 java程序设计课程,9.4.1,声明类以实现,Comparable,接口,public,Rectangle(double,width,double height),this.width,=width;,this.height,=height;,/*,访问,width*/,public double,getWidth,(),return width;,57,楚雄师范学院计算机科学系 java程序设计课程,9.4.1,声明类以实现,Comparable,接口,/*,设置新的,width*/,public void,setWidth(double,width),this.width,=width;,/*,访问,height*/,public double,getHeight,(),return height;,58,楚雄师范学院计算机科学系 java程序设计课程,9.4.1,声明类以实现,Comparable,接口,/*,设置新的,height*/,public void,setHeight(double,height),this.height,=height;,/*,返回面积,*,/,public double,getArea,(),return width*height;,59,楚雄师范学院计算机科学系 java程序设计课程,9.4.1,声明类以实现,Comparable,接口,/*,返回周长*,/,public double,getPerimeter,(),return 2*(width+height);,60,楚雄师范学院计算机科学系 java程序设计课程,9.4.1,声明类以实现,Comparable,接口,package ch9;,public class,ComparableRectangle,extends Rectangle implements Comparable,/*,定义一个实现,Comparable,接口的,Rectangle*/,public,ComparableRectangle(double,width,double height),super(width,height);,61,楚雄师范学院计算机科学系 java程序设计课程,9.4.1,声明类以实现,Comparable,接口,/*,实现,Comparable,接口中的,compareTo,方法*,/,public,int,compareTo(Object,o),if(,getArea,()(,ComparableRectangle)o).getArea,(),return 1;,else if(,getArea,()(,ComparableRectangle)o).getArea,(),return-1;,else,return 0;,62,楚雄师范学院计算机科学系 java程序设计课程,9.4.1,声明类以实现,Comparable,接口,此时,ComparableRectangle,已实现,Comparable,接口,即它已具有如下关系,:,63,楚雄师范学院计算机科学系 java程序设计课程,9.4.1,声明类以实现,Comparable,接口,这样,可有如下句子,:,ComparableRectangle,r1=ComparableRectangle(4,5);,ComparableRectangle,r2=ComparableRectangle(3,6);,System.out.println(Max.max(r1,r2);,64,楚雄师范学院计算机科学系 java程序设计课程,9.4.2,接口与抽象类,可以像使用抽象类一样使用接口,但是,声明接口与声明抽象类有所不同,下表总结了这些不同点,:,65,楚雄师范学院计算机科学系 java程序设计课程,9.4.2,接口与抽象类,利用关键字,extends,接口可以继承其他接口,这样的接口称为,子接口,(,subinterface,),对接口而言,继承可以是多重的,例如,:,public,interface,NewInterface,extends,Interface1,interfaceN,/,常量和抽象方法,注意,1:,66,楚雄师范学院计算机科学系 java程序设计课程,9.4.2,接口与抽象类,一个实现,NewInterface,的类必须实现定义在,NewInterface,Interface1,interfaceN,中的抽象方法,.,注意,2:,一个接口只能扩展其他接口,不能扩展类,;,一个类可以扩展它的父类并实现多个接口,注意,3:,所有的类共享同一个根,Object,类,但接口没有共同的根,67,楚雄师范学院计算机科学系 java程序设计课程,9.4.2,接口与抽象类,注意,4:,与类相似,接口也可以定义一个类型。一个接口类型的变量,可以引用实现该接口类的实例,.,如果一个类实现了一个接口,这个接口就类似于该类的一个父类。可以将接口当作一个数据类型使用,能够将接口类型变量转换到它的子类,反过来也可以。例如:假设,c,是下图所示中,Class2,的一个实例:,68,楚雄师范学院计算机科学系 java程序设计课程,9.4.2,接口与抽象类,69,楚雄师范学院计算机科学系 java程序设计课程,9.4.2,接口与抽象类,那么,,c,也是,Object,Class1,Interface1,Interface1_1,Interface1_2,Interface2_1,和,Interface2_2,的实例。,70,楚雄师范学院计算机科学系 java程序设计课程,9.4.3,创建自定义,接口,前面,我们给出了实现,java,库中,Comparable,接口的例子,.,本节我们将介绍自定义接口,.,假设要描述对象是否可食用,则可声明可食用接口,Edible,如下,:,public interface Edible,public String,howToEat,();,为了指明对象是否可食用,对象的类必须实现接口,Edible.,71,楚雄师范学院计算机科学系 java程序设计课程,9.4.3,创建自定义,接口,下面,我们创建两种类的集合,:,集合,1,:一个类名为,Animal(,动物,),及其子类,Tiger(,老虎,),、,Chicken(,小鸡,),和,Elephant(,大象,),。,由于小鸡是可食用的,对小鸡类,Chicken,实现,Edible,接口,如下所示:,class Animal,public Animal(),72,楚雄师范学院计算机科学系 java程序设计课程,9.4.3,创建自定义,接口,class Chicken extends Animal,implements,Edible,Comparable,int,weight;,public Chicken(),weight=1;,public,Chicken(int,weight),this.weight,=weight;,public String,howToEat,(),return,烤了吃,;,73,楚雄师范学院计算机科学系 java程序设计课程,9.4.3,创建自定义,接口,public,int,compareTo(Object,o),return weight-(,Chicken)o).weight,;,class Tiger extends Animal,74,楚雄师范学院计算机科学系 java程序设计课程,9.4.3,创建自定义,接口,集合,2,:一个类名为,Fruit(,水果,),及其子类,Apple(,苹果,),和,Orange(,桔子,),。,由于所有的水果都是可食用的,对水果类,Fruit,实现,Edible,接口,并且当不知道水果具体是什么时,无法实现,howToEat,方法,所以它是一个抽象类,如下所示:,abstract class Fruit implements Edible,75,楚雄师范学院计算机科学系 java程序设计课程,9.4.3,创建自定义,接口,class Apple extends Fruit,public String,howToEat,(),return,做苹果酱吃,;,class Orange extends Fruit,public String,howToEat,(),return,做桔子汁吃,;,76,楚雄师范学院计算机科学系 java程序设计课程,9.4.3,创建自定义,接口,Edible,接口演示程序:,public class,TestEdible,public static void,main(String,args,),Object objects=new,Tiger(),new,Chicken(),new Apple();,for(int,i=0;i(,House)o).area,),return 1;,else if(area (,House)o).area,),return-1;,else,return 0;,86,楚雄师范学院计算机科学系 java程序设计课程,9.4.4,可克隆,接口,Cloneable,现在可以创建,House,类的一个对象,并使用它产生复制品:,House h1=new House(1,1750.50);,Hpuse,h2=(House)h1.clone();,在复制过程中,如果域是基本类型的,它的值被复制;如果域是对象,域的引用被复制。这叫做,浅复制,(shallow copy),。,如果域是对象,且对象被复制,则称为,深复制,(deep copy),。例如,编程练习第,4,题。,87,楚雄师范学院计算机科学系 java程序设计课程,
展开阅读全文