您的位置:程序门 -> java -> j2se / 基础类



关于super与this的问题?


[收藏此页] [打印本页]选择字色:背景色:字体:[][][]


关于super与this的问题?
发表于:2007-01-08 18:41:55 楼主
我想在一个子类里写一个函数,返回该类的超类的引用,为什么用   return   super   不行,会出现编译错误!而用   return   this   不会出现编译错误
我想问一下super和this在同一个类中到底有哪些使用上的不同?

代码如下:
public   class   testmethodoverload
{
public   static   void   main(string[]   args)
{
sub   sub   =   new   sub();
super   sup   =   new   super();
sub.print();
// sub.super.print();
// sub.getsuper().print();
}
}

class   super
{
void   print()
{
system.out.println( "super   class! ");
}
}

class   sub   extends   super
{
void   print()
{
system.out.println( "sub   class! ");
super.print();
}
super   getsuper()
{
return   this;
//return   super;
//   错误信息如下:
//   testmethodoverload.java:31:   需要 '. '
//   return   super;
//                           ^
//   1   错误
}
}
发表于:2007-01-08 22:08:301楼 得分:0
"在一个子类里写一个函数,返回该类的超类的引用 "

我觉得这句话是错的。

一个类的实例创建以后,它的引用就固定了。只要这个实例存在,这个引用就一定指向这个实例。

“返回该类的超类的引用”,这个说法不恰当。可以说:以它超类的类型返回这个实例的引用。也就是说,返回以后,看上去是个super类的实例,其实还是子类的实例。这个时候,return   this   就对了。

这个时候,如果用返回的引用调用方法,被调用的方法还是子类的。

还有一个概念错误,给出的例子中,方法print()在子类中是被overridden,不是被overloaded。
发表于:2007-01-08 23:10:122楼 得分:0
楼上的解释够全面。

我觉得,楼主只所以遇到这个问题,是实现的思路有待改进。
发表于:2007-01-14 11:01:163楼 得分:0
首先谢谢楼上各位的回帖!
由于考试没来看帖,对不住楼上的各位了!

to   z_lping(schemer):
谢谢你的回复!
我认同你的观点
你说“以它超类的类型返回这个实例的引用”
是不是super引用中保存的是超类类型的子类的实例引用?
如果是这样,当子类中存在overridden的方法时,
就不能使用super引用来调用超类overridden前的同名方法?

说明:
我写这个程序只是想找出在同一个类中,super   与   this   在使用上的不同!
我在写这段代码的时候,突然发现在同一个方法中只能用 "return   this ",而不能用 "return   super "   ,所以想拿出来问一下,这是为什么?
发表于:2007-01-14 12:27:024楼 得分:0
在子类里,可以用super.访问父类的变量和方法。
发表于:2007-01-15 22:23:135楼 得分:0
谢谢z_lping(schemer)的回复
我想清楚了
发表于:2007-01-16 00:34:206楼 得分:0
这些知识在 < <core   java> > 解释的很清楚
this:一是用来表示对隐式参数的引用,一是调用同一类的其他构造器.
super:一是调用超类方法,一是调用超类构造器.
发表于:2007-01-16 11:07:127楼 得分:0
学习
发表于:2007-01-17 11:15:478楼 得分:0
focus
发表于:2007-01-17 11:45:419楼 得分:0
挺无聊的,super是静态的概念,编译时就确定了,this是多态的关键


快速检索

最新资讯
热门点击