import java.io.PrintWriter;
public class PointTest 

    public static void main(String args[])
    {
        PrintWriter out = new PrintWriter(System.out ,true);
        MyPoint mp =new MyPoint(4,3);
        Point2D p = new Point2D(11);   
        Point2D q=mp;
        mp.x=5;mp.y =12;
        out.println("\n\t DataMember Access Test:\n");
        out.println("mp = (" + mp.x + ", "+mp.y+")");
        out.println("p = (" + p.x + ", "+p.y+")");
        out.println("q = (" + q.x + ", "+q.y+")");
        out.println("\n\t CastingTest:\n");
        out.println("(Point2D)mp = (" + ((Point2D)mp).x + "," +((Point2D)mp).y + ")");
        out.println("(MyPoint)q = (" + ((MyPoint)q).x + "," +((MyPoint)q).y + ")");
        
    }
    
} public class Point2D 

    int x,y;
    Point2D(){
        this(0,0);
    }
    Point2D(int x)
    {
        this(x,0);
    }
    Point2D(int x,int y )
    {
        this.x=x;
        this.y=y;
    }
    double length()
    {
        return Math.sqrt(x*x+y*y);
    }
} public class MyPoint extends Point2D

    int x,y;
    MyPoint(int x,int y)
    {
        super(x,y);
        this.x=x;
        this.y=y;
   }
   double length()
   {
    return Math.sqrt(x*x+y*y);
   }
    double distance()
    {
        return Math.abs(length()-super.length());
    }
    

 运行结果是  :         DataMember Access Test:mp = (5, 12)
p = (11, 0)
q = (4, 3)         CastingTest:(Point2D)mp = (4,3)
(MyPoint)q = (5,12)    ??我这里不是很清楚,请问为什么是 (4,3)和 (5,12)

解决方案 »

  1.   

    return Math.abs(this.length()-super.length());
      

  2.   

    这个是 JAVA 2从入门到精通 书中的例子啊
      

  3.   

    这个例子中的知识点应该是JAVA基础中最难理解的一个了,叫做动态邦定,是多态的一种首先,Point2D q=mp; 其实相当于 Point2D q=new MyPoint(4,3); 
    动态邦定有一个特点就是生成的是子类的对象,但是使用的其实都是父类的属性和方法,而q若要想使用指向的对象MyPoint类中的属性和方法,就得强制转型,就像(MyPoint)q,这种方法也叫向下转型,但是向下转型必须以Point2D q=new MyPoint(4,3);这种方式声明对象,像MyPoint mp =new MyPoint(4,3);这样声明对象就不能使用向下转型;与此相反,向上转型就没有这样的限制,就像MyPoint mp =new MyPoint(4,3);声明的对象可以直接使用向上转型(Point2D)mp换句通俗的话讲,子类一定是一个父类(extends关键字),而父类则不知道那些类是自己的子类
      

  4.   

    子类一定是一个父类(extends关键字),而父类则不知道那些类是自己的子类
    ????????????????????
    为什么子类一定是一个父类,楼上地把话说清楚好不好,总之把父类强转成子类肯定不行。
    还有,你的x,y能不能不这样赋值啊,题外话,别生气啊
      

  5.   

    楼上的应该好好的看一看关于面向对象中继承、关联、聚集、组合等关系方面的知识,继承关系就是“is-a”的关系,也就是使一个的关系,举个例子,有一个父类Person,两个子类Student和Teacher,你可以说学生是一个人,老师是一个人,但是你不能说人是一个学生,不知道这样讲是否能理解
      

  6.   

    建议你用eclipse的调试工具,然后设置断点,一步步的看内存中的对应的值。你就一目了然了