回 帖 发 新 帖 刷新版面

主题:为什么不是输出派生类的aaa

class SuperClass
{
    String a="hello";
    void test()
    {
      System.out.println(a);
    }
}
public class SubClass extends SuperClass
{
      String  a="aaa";
      public static void main (String args[])
      {
          SubClass bar=new SubClass();
          bar.test();
          System.out.println(bar.a);
      }
}
                          
   为什么 //output:   hello
    //          aaa

下面的程序能输出派生类的Square,为什么上面的不能输出派生类的aaa
public class Rectangle
{
    String name;
    double length;
    double width;
    public Rectangle(double _length,double _width)
    {
        name="Rectangle";
        length=_length;
        width=_width;
    }
    
    public void display()
    {
        System.out.println( name);
        System.out.println( "length:"+length);
        System.out.println( "width:"+width);
    }

public class Square extends Rectangle
{
      public Square(double _side)
      {
          super(_side,_side);
          name="Square";
      }
}
public class Test
{
    public static void main(String args[])
    {
        Square square=new Square(4);
        square.display();
    }
}

回复列表 (共8个回复)

沙发


因为String a="hello";String a="aaa";
是两个不同的Strig对象,
而你调用父类的test()方法,而父类中的test方法输出的是父类中的String a="hello"


板凳

你确定你的第一个程序和第二个程序思想和方法是一样的吗?
不防比较两个程序,看看差别在哪些地方,想想这些差别各有什么用.

3 楼

你的子类并没有覆盖父类的方法test(),所以输出的仍然是父类属性a。

class SuperClass
{
    String a="hello";
    void test()
    {
      System.out.println(a);
    }
}
class SubClass extends SuperClass
{
      String  a="aaa";
      public static void main (String args[])
      {
          SubClass bar=new SubClass();
          bar.test();   
          System.out.println(bar.a);
          
      }
      
      void test()  //覆盖父类方法test()
      {
          System.out.println (a);
      }
}

最后控制台输出 
               aaa
               aaa

4 楼

能否解释一下这三个有什么不同
class SuperClass
{
    String a="hello";
    void test()
    {
      System.out.println(a);
    }
}
public class SubClass extends SuperClass
{
      public SubClass()
      {
        a="aaa";
      }
      public static void main (String args[])
      {
          SubClass bar=new SubClass();
          bar.test();
          System.out.println(bar.a);
      }
}
                          
    //output:   hello
    //          aaa

/*
class SuperClass
{
    String a="hello";
    void test()
    {
      System.out.println(a);
    }
}
public class SubClass extends SuperClass
{
      public SubClass()
      {
        a="aaa";
      }
      public static void main (String args[])
      {
          SubClass bar=new SubClass();
          bar.test();
          System.out.println(bar.a);
      }
}
                          
    //output:   aaa
    //          aaa
*/
   
/*
class SuperClass
{
    String a="hello";
    void test()
    {
      System.out.println(a);
    }
}
public class SubClass extends SuperClass
{
      public SubClass()
      {
        String a="aaa";
      }
      public static void main (String args[])
      {
          SubClass bar=new SubClass();
          bar.test();
          System.out.println(bar.a);
      }
}
                          
    //output:   hello
    //          hello
*/

5 楼

前面两个,没看出代码有什么不同也!!!

第三个的
public SubClass()
      {
        String a="aaa";
      }
只是把 a 作为构造方法的局部变量,脱离了这构造方法,它就没用了,
也就说它跟SuperClass类的全局变量好毫不相干的.

6 楼

sorry ,第一个应为
class SuperClass
{
    String a="hello";
    void test()
    {
      System.out.println(a);
    }
}
public class SubClass extends SuperClass
{
     
       String a="aaa";
      
      public static void main (String args[])
      {
          SubClass bar=new SubClass();
          bar.test();
          System.out.println(bar.a);
      }
}
                          
    //output:   hello
    //          aaa

7 楼

class SuperClass
{
    String a="hello";
    void test()
    {
      System.out.println(a);
    }
}
public class SubClass extends SuperClass
{
      String a="aaa";
      public static void main (String args[])
      {
          SubClass bar=new SubClass();
          bar.test();
          System.out.println(bar.a);
      }
}
不知道我提的问题对不对
在test()函数没覆盖前,在子类的内存中中有没有test()的内存 ,还是和父类共享一个test()
在test()函数没覆盖后,是不是在SubClass中只有String a=“aaa”,String a=“hello”,覆盖后(即子类自己定义的)test()的内存

8 楼


class SuperClass
{
    String a="hello";
    void test()
    {
      System.out.println(a);
    }
}
public class SubClass extends SuperClass
{
      String a="aaa";
      void test()
    {
      System.out.println(a);
    }

      public static void main (String args[])
      {
          SubClass bar=new SubClass();
          bar.test();
          System.out.println(bar.a);
      }
}
不知道我提的问题对不对
在test()函数没覆盖前,在子类的内存中中有没有test()的内存 ,还是和父类共享一个test()
在test()函数没覆盖后,是不是在SubClass中只有String a=“aaa”,String a=“hello”,覆盖后(即子类自己定义的)test()的内存

我来回复

您尚未登录,请登录后再回复。点此登录或注册