import java.util.*;
举个例子,如Vector类的toString方法覆盖了Object类的toString.(返回[...]而不是内存地址)
由于多态,不可能调用Object类的toString.要想调用Object的toString,如果继承Vector类,就要在类内部调用父类的父类的方法了。public class mainclass {  public static void main(String[] args) {
    My m1=new My();
    System.out.println(m1.toString());//输出My@131f71a
    Vector v1=new Vector();
    System.out.println(v1.toString());//输出[];
     }}
   
 class My{  
}

解决方案 »

  1.   

    具体说
    对于Vector v1=new Vector();
    就是想调用toString,打出v1的内存地址。
      

  2.   

    可那是另一个对象了,
    class My extends Object
    {
    }My m1=new My();
    m1.toString();有什么意义呢。
      

  3.   

    在子类的toString方法里加一句 super.toString()
      

  4.   

    java.lang.Vector的类能让我改吗?
      

  5.   


    直接NEW一个父类,调用父类的方法不就行了
      

  6.   

    Object.toString其实没有什么内存地址啊:
        public String toString() {
    return getClass().getName() + "@" + Integer.toHexString(hashCode());
        }
    它只是在后面增加了HashCode而已,当然这个HashCode在默认情况下面和内存地址有关系,你可以这样做
    Vector v = ...;
    return v.getClass().getName() + "@" + Integer.toHexString(System.identityHashCode(v));identityHashCode(Object x) 返回的就是Object默认情况下面的HashCode
      

  7.   

    你也可以自己写个hashCode(),和equals覆盖掉Object的!
      

  8.   


    既然子类覆盖了父类的toString方法,又想在外部利用子类掉用父类的toString那麽就在子类中重新写个方法调用super.toString()就ok了嘛,.
      

  9.   

    楼主应该搞清楚一件事情:
    toString()并不是设计成用来打印地址的!
    因为所有对象的打印地址的方法都是一样的,所以如果toString()是用来打印地址的话,那么它应该是一个final方法,而无需子类去覆盖。
    因此,要打印内存地址,不要在toString()方法上作文章,而应该自己去实现。
      

  10.   

    import java.util.Vector;class Aa {
      public static void main(String[] argd) {
        my m = new my();
        System.out.println(""+m.toString());

        Vector v = new Vector();
        System.out.println(Aa.getHascode(v));

      }
      //写个方法
      public static String getHascode(Vector x){      //传个Vector类型的变量进来
        return("@" + System.identityHashCode(x));  //把该变量的地址传回去,至于怎麼取得该变的名字我也不知道了,还请各位高手提点提点!!
      }
    }
      

  11.   

    my m = new my();
        System.out.println(""+m.toString());
    这里不要
      

  12.   

    其实我关心的不是toString的实现,只是举了个例子。我关心的是:方法覆盖时,如何在类外部调用父类的方法,或是在类内部调用父类的父类的方法,或是不可能实现?就像在C++中很容易实现的:
     
    #include "iostream.h"
    class super1
    {public:
    virtual int get (){
    return 1;}
    };class super2:public super1
    {public:
    int get(){
    return 2;}
    };class super3:public super2
    {public:
        int get(){
    return 3;}
    };void main()
    {super1 s3;
    cout<<s3.super1::get();//打印1
    }
      

  13.   

    要调用父类的方法,用向上转型就可以了啊。
    比如:
      MyClass myObject = new MyClass(); //MyClass是BaseClass的子类,或者是BaseClass的子类的子类
      ((BaseClass1)myObject).f();       //f()是MyClass继承自BaseClass的方法并且进行了覆盖
    也就是说,只要知道了父类的名字并且确信是覆盖的父类的方法,就可以直接调用父类的方法(甚至是父类的父类的父类...的方法。
      

  14.   

    to okjohn(大嘴青蛙) 你这种方法根本没有效果,它还是调用了子类的方法的
    在Java里面,你无法直接调用父类的方法!在子类当中可以调用super.methodA()这样调用父类
      

  15.   

    多谢ChDw(米)指正,是我严重搞错了.
    那么在子类外部如何调用父类的方法?关注...
      

  16.   

    子类调用父类的方法倒是有的,写一个方法,直接super.xxx();就可以了。
    这里的问题是子类如何调用父类的父类(或者叫“祖父类”?)的方法。
    我认为不能实现。
      

  17.   

    我想是没有办法办到的。因为JAVA不支持多重继承,所以没有cout<<s3.super1::get();这样的语句让你指明调用那个父类的方法,所以只能调用上直接父类的方法。但变量就可以通过cast取道父类得值。