面向对象的高级特征

面向对象的高级特征

ID:39750063

大小:297.51 KB

页数:70页

时间:2019-07-10

面向对象的高级特征_第1页
面向对象的高级特征_第2页
面向对象的高级特征_第3页
面向对象的高级特征_第4页
面向对象的高级特征_第5页
资源描述:

《面向对象的高级特征》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、第五章面向对象的高级特征南京农业大学谢忠红一、继承中父类(子类)的转化问题继承的定义:子类继承父类的属性和方法(可以修改父类的属性或重载父类的方法),以及在父类的基础上添加新的属性和方法则就叫做继承。在Java中,有一个被称为Object的特殊超类,所有的类都直接或间接地继承Object类继承super部分Sub2增加的部分继承super部分Sub2增加的部分Super超类子类对象转换为父类对象向上转换:子类对象转换为父类对象时,是安全的,可以用显式或隐式实现.类型向上转换是安全的,因为这是从特殊类型到通用类型的转换。父类子类safec

2、lasspoint{intx,y;point(intx,inty){this.x=x;this.y=y;}intgetX(){returnx;}}classcircleextendspoint{intradius;circle(intr,intx,inty){super(x,y);radius=r;}doublearea(){returnMath.PI*radius*radius;}}publicclasstestUpCasting{publicstaticvoidmain(String[]args){System.out.printl

3、n(p.getX());}}circlec=newcircle(1,1,1);pointp=c;//注意p和c的类型不同注意:进行向上类型转换时,出现的唯一问题是可能丢失子类中定义的方法和变量。例如:子类对象C具有两个方法getX()和area().;而将c赋给p之后,p就只有getx()一个方法了。父类对象转换为子类对象从父类向子类转换,在继承图中是向下移动,称为向下类型转换,需进行强制转换。类型向下转换是不安全的(产生类型转换异常:classCastException),因为这是从一般类型到特殊类型的转换,意味着该变量可以使用更多的

4、特性(包括子类中的方法和变量)。父类子类unsafepublicstaticvoidmain(String[]args){pointp=newpoint(1,1);circlec;c=(circle)p;//将对象p强制转换为circle对象System.out.println(c.area());}编译通过、运行失败原因:将p强制转换为circle类型的对象c,意味着c可以使用子类中的方法area()、变量radius.而p是没有这些方法和变量改进的方法:publicstaticvoidmain(String[]args){point

5、p=newpoint(1,1);circlec;}if(pinstanceofcircle){//判断p是否是circle的实例c=(circle)p;System.out.println(c.area());}else//出错处理System.out.println("cannotdownCasting");再看下例:publicstaticvoidmain(String[]args){pointp=newcircle(10,10,10);//注意p可以指向其子类circlec;}if(pinstanceofcircle){//判断p

6、是否是circle的实例c=(circle)p;System.out.println(c.area());}else//出错处理System.out.println("cannotdownCasting");二、static变量和static方法说明:即使没有创建对象,该变量仍然存在。因此,static变量又称为类变量。说明:静态变量可以通过类名调用。定义格式为:statictypevariableName;static变量(类变量):static变量属于类而非对象,不管在程序运行中生成多少个该类的对象,它们都共享该变量,publicc

7、lassScope{staticinta;publicstaticvoidmain(stringargs[]){a++;Scopes1=newScope();s1.a++;Scopes2=newScope();s2.a++;Scope.a++;System.out.println(“a=”+a);}}程序运行结果是?a=4publicclassstaticTest{staticintnum=0;intc;staticTest(){num++;}publicstaticvoidmain(Stringargs[]){staticTestx=

8、newstaticTest();System.out.print(x.num);staticTesty=newstaticTest();System.out.println(y.num);}}将(1)行挪到

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。