我正在尝试实现java的DMD概念。但是没有按预期获得输出

时间:2015-07-13 16:30:43

标签: java override

     class Rectangle extends Tri{
       public void draw() {
         System.out.println("Rectangle");
       }  
     } 

     class Tri {
      public void draw() {
        System.out.println("Triangle");
       }
     }

    class Circle extends Rectangle{
     public void draw() {
      System.out.println("Circle");
      }
     }

    class rect
    {
     public static void main(String[] args) 
     {
      Circle c=new Circle();
      Tri t=new Tri();
      Rectangle r=new Rectangle(); 

      r.draw(); //Rectangle
      r=c;
      r.draw();  //Circle
      t=r;
      t.draw(); // Rectangle expected.But getting Circle as output.
       }
     }

在“ t.draw ”中,我提到“ t = r ”,它应该显示“矩形”但是我的输出为“Circle”。可能是因为早期的引用 r = c 。 但它仍然是一个疑问。

2 个答案:

答案 0 :(得分:0)

您之前已将c分配给变量r

当你到达t = r行时,r = c已经......现在t = c

为什么要创建变量t只是为了为其分配rc?为什么不直接处理rc以使事情变得更清楚?

答案 1 :(得分:0)

此行为符合预期,因为您已指定r = c然后t = r,因此对象t引用保持为c即circle。因此它将输出打印为Circle。我希望这能解释JAVA的行为。