欢迎来到天天文库
浏览记录
ID:39750063
大小:297.51 KB
页数:70页
时间:2019-07-10
《面向对象的高级特征》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
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)行挪到
此文档下载收益归作者所有