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{
}
举个例子,如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{
}
对于Vector v1=new Vector();
就是想调用toString,打出v1的内存地址。
class My extends Object
{
}My m1=new My();
m1.toString();有什么意义呢。
直接NEW一个父类,调用父类的方法不就行了
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
既然子类覆盖了父类的toString方法,又想在外部利用子类掉用父类的toString那麽就在子类中重新写个方法调用super.toString()就ok了嘛,.
toString()并不是设计成用来打印地址的!
因为所有对象的打印地址的方法都是一样的,所以如果toString()是用来打印地址的话,那么它应该是一个final方法,而无需子类去覆盖。
因此,要打印内存地址,不要在toString()方法上作文章,而应该自己去实现。
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)); //把该变量的地址传回去,至于怎麼取得该变的名字我也不知道了,还请各位高手提点提点!!
}
}
System.out.println(""+m.toString());
这里不要
#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
}
比如:
MyClass myObject = new MyClass(); //MyClass是BaseClass的子类,或者是BaseClass的子类的子类
((BaseClass1)myObject).f(); //f()是MyClass继承自BaseClass的方法并且进行了覆盖
也就是说,只要知道了父类的名字并且确信是覆盖的父类的方法,就可以直接调用父类的方法(甚至是父类的父类的父类...的方法。
在Java里面,你无法直接调用父类的方法!在子类当中可以调用super.methodA()这样调用父类
那么在子类外部如何调用父类的方法?关注...
这里的问题是子类如何调用父类的父类(或者叫“祖父类”?)的方法。
我认为不能实现。