覆写子类的返回类型

覆写子类的返回类型

为了运用多态性,当编写子类时,你肯定会覆写超类的方法。当你覆写超类的方法时,你是否想到过更改方法的返回类型。如果你没有,那祝贺你,你不曾为此烦恼过;如果你想到过,那你肯定是非常的郁闷。在Java 5.0以前,你是无法更改超类定义的方法的返回类型的。不过当你使用Java 5.0以后,你会惊喜地发现,此烦恼不复存在了。

下面的示例显示了这一新特性的用法:

package  com.jiang.tiger.chap1;

class  Point2D  {
      
protected   int  x, y;

      
public  Point2D( )  {
        
this .x = 0 ;
        
this .y = 0 ;
      }

  
      
public  Point2D( int  x,  int  y)  {
        
this .x  =  x;
        
this .y  =  y;
      }

      
      
public  String toString()  {
          
return   " the position is x =  "   +  x  +   " ,y =  "   +  y ;
      }

    }


    
class  Point3D  extends  Point2D  {
      
protected   int  z;

      
public  Point3D( int  x,  int  y)  {
        
this (x, y,  0 );
      }

 
      
public  Point3D( int  x,  int  y,  int  z)  {
        
this .x  =  x;
        
this .y  =  y;
        
this .z  =  z; 
      }

      
      
public  String toString()  {
          
return   " the position is x =  "   +  x  +   " ,y =  "   +  y  +   " ,z=  "   +  z;
      }

    }


    
class  Position2D  {
      Point2D location;
 
      
public  Position2D( )  {
        
this .location  =   new  Point2D( );
      }


      
public  Position2D( int  x,  int  y)  {
        
this .location  =   new  Point2D(x, y);
      }


      
public  Point2D getLocation( )  {
        
return  location;
      }

    }


    
public   class  Position3D  extends  Position2D  {
      Point3D location;
 
      
public  Position3D( int  x,  int  y,  int  z)  {
        
this .location  =   new  Point3D(x, y, z);
      }


      
public  Point3D getLocation( )  {
        
return  location;
      }

            
      
public   static   void  main(String[] args)  {
          Position2D position 
=   new  Position3D( 12 23 36 );
          Point3D clone 
=  (Point3D)position.getLocation();
          System.out.println(clone);
      }

    }

为验证功能是否正确,我们看看运行结果:

the position is x = 12,y = 23,z= 36

你可能感兴趣的:(覆写子类的返回类型)