面向对象的高级程序设计.ppt
《面向对象的高级程序设计.ppt》由会员分享,可在线阅读,更多相关《面向对象的高级程序设计.ppt(61页珍藏版)》请在三一办公上搜索。
1、面向对象的高级程序设计,伍淳华北京邮电大学计算机学院,Java,面向对象高级程序设计,继承object类,所有类都是Object的子类;Object obj=new BackAccount();Object obj=new String(“Hello”);,Java,面向对象高级程序设计,继承object类,equals方法toString方法clone方法在自己编写的类中,最好重写这些方法!,Java,面向对象高级程序设计,继承object类,equals方法public boolean equals(Object obj)return(this=obj);判断两个对象是否具有相同的引用,J
2、ava,面向对象高级程序设计,继承object类,equals方法 class BankAccount public boolean equals(Object obj)BankAccount other=(BankAccount)obj;return(accountNumber=other.accountNumber&balance=other.balance),Java,面向对象高级程序设计,继承object类,equals方法 class BankAccount public boolean equals(Object obj)if(this=obj)return true;if(obj
3、=null)return false;if(getClass()!=obj.getClass()return false;BankAccount other=(BankAccount)obj;return(accountNumber=other.accountNumber&balance=other.balance),Java,面向对象高级程序设计,继承object类,子类中实现equals方法 首先调用超类的equals,如果未通过测试,对象就不可能相等;如果超类中的域都相等,就比较子类中的实例域;,Java,面向对象高级程序设计,继承object类,子类中实现equals方法class S
4、avingAccount extends BankAccount public boolean equals(Object obj)if(!super.equals(obj)return false;SavingAccount other=obj;return/比较SavingAccount中的成员变量,Java,面向对象高级程序设计,继承object类,Java语言规范要求equals方法具有下面的特性1)自反性:对于任何非空引用x,x.equals(x)应该返回true;2)对称性:对于任何引用x和y,如果x.equals(y)返回true,那么y.equals(x)也应该返回true;3
5、)传递性:对于任何引用x,y,z,如果x.equals(y)返回true,y.equals(z)返回true,那么x.equals(z)也应该返回true;4)一致性:如果x和y引用的对象没有发生变化,那么反复调用x.equals(y)应该返回同样的结果;5)对于任意非空引用x,x.equals(null)应该返回false;,Java,面向对象高级程序设计,继承object类,注意:class BankAccount public boolean equals(BankAccount obj)if(this=obj)return true;if(obj=null)return false;i
6、f(getClass()!=obj.getClass()return false;return(accountNumber=obj.accountNumber&balance=obj.balance),Java,面向对象高级程序设计,继承object类,注意:class BankAccount public boolean equals(Object obj)if(this=obj)return true;if(obj=null)return false;if(!(obj instanceof BankAccount)return false;BankAccout other=(BankAcc
7、ount)obj;return(accountNumber=other.accountNumber&balance=other.balance),Java,面向对象高级程序设计,继承object类,注意:如果子类能够拥有自己的相等概念,那么对称性需求将强制采用getClass进行检测;如果由超类决定相等的概念,则可以使用instanceof进行检测,这样可以在不同子类的对象之间进行相等的比较.,Java,面向对象高级程序设计,继承object类,hashCode方法hasCode方法返回一个整型数值,并合理地组合实例域的散列码,以便能够让各个不同的对象产生的散列码更加均匀;如果x.equals
8、(y)返回true,那么x.hashCode()就必须与y.hashCode()具有相同的值;如果重新定义equals方法,就必须重新定义hashCde方法;Object类的hashCode()方法返回对象的存储地址;,Java,面向对象高级程序设计,继承object类,hashCode方法class BankAccountpublic int hashCode()return 7*Integer(accountNumber).hashCode()+11*Double(balance).hashCode();,Java,面向对象高级程序设计,继承object类,toString方法 返回对象的
9、字符串表示;Object类中默认返回对象所属的类名和散列码.System.out.println(System.out);输出:java.io.PrintStreama90653,Java,面向对象高级程序设计,继承object类,toString方法 重写toString方法一般遵循的格式为:类名成员变量值 java.awt.Pointx=20,y=20BankAccout中的toString函数可改写为:public String toString()retrun“BankAccoutbalance=“+balance+”,accountNumber=“+accountNumber+”;,
10、Java,面向对象高级程序设计,继承object类,toString方法public String toString()retrun getClass().getName()+”balance=“+balance+”,accountNumber=“+accountNumber+”;,Java,面向对象高级程序设计,继承object类,toString方法class SavingAccount extends BankAccountpublic String toString()retrun super.toString()+”interest=“+interest+”;,Java,面向对象高级
11、程序设计,接口,接口代码重用Eg:DataSet,Java,面向对象高级程序设计,接口,接口代码重用 如果想计算一组BankAccount对象中余额的最大值和平均值?,Java,面向对象高级程序设计,接口,接口代码重用 public class DataSet.public void add(BankAccount x)sum=sum+x.getBalance();if(count=0|maximum.getBalance()x.getBalance()maximum=x;count+;public BankAccount getMaximum()return maximum;private
12、double sum;private BankAccount maximum;private int count;,Java,面向对象高级程序设计,接口,接口代码重用 public class DataSet.public void add(Student x)sum=sum+x.getScore();if(count=0|maximum.getScore()x.getBalance()maximum=x;count+;public Student getMaximum()return maximum;private double sum;private Student maximum;pri
13、vate int count;,Java,面向对象高级程序设计,接口,接口代码重用X的数据类型;如果每个对象实现一个getMeasure方法来提供测量的内容,就可实现一个可重用的DataSet,以add()方法为例:sum=sum+x.getMeasure();if(count=0|maximum.getMeasure()x.getMeasure()maximum=x;count+;X的数据类型应该是什么?-X的数据类型可以是任意实现了getMeasure()的类。,Java,面向对象高级程序设计,接口,接口可用来规范类的行为,只包含常量和方法的定义,而没有变量和方法的实现。接口的定义接口的定
14、义包括接口声明和接口体完整的接口声明:public interface interfaceNameextends listOfSuperInterface 接口体包括常量定义和方法定义-常量定义格式为:type NAME=value;该常量被实现该接口的多个类共享;缺省的具有public,final,static的属性。-方法体定义格式为:(缺省的具有 public和abstract属性)returnType methodName(paramlist);,Java,面向对象高级程序设计,接口,接口的定义Example:public interface Measurable double get
15、Measure();,Java,面向对象高级程序设计,接口,接口的实现在类的声明中用implements子句来表示一个类实现某个接口一个类可以实现多个接口,在implements子句中用逗号分开在类体中可以使用接口中定义的常量,必须实现接口中定义的所有方法。,Java,面向对象高级程序设计,接口,接口的实现例:public class BankAccount implements Measurable/Other BankAccount methods public double getMeasure()/Method implementation,Java,面向对象高级程序设计,接口,接口类
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 面向 对象 高级 程序设计

链接地址:https://www.31ppt.com/p-2279007.html