当前位置:  技术问答>java相关

thinkinjava里得,不明白,super???

    来源: 互联网  发布时间:2015-06-14

    本文导语:  class Cleanser {   private String s = new String("Cleanser");   public void append(String a) { s += a; }   public void dilute() { append(" dilute()"); }   public void apply() { append(" apply()"); }   public void scrub() { append(" scrub()");...

class Cleanser {
  private String s = new String("Cleanser");
  public void append(String a) { s += a; }
  public void dilute() { append(" dilute()"); }
  public void apply() { append(" apply()"); }
  public void scrub() { append(" scrub()"); }
  public void print() { System.out.println(s); }
  public static void main(String[] args) {
    Cleanser x = new Cleanser();
    x.dilute(); x.apply(); x.scrub();
    x.print();
  }
}

public class Detergent extends Cleanser {
  // Change a method:
  public void scrub() {
    append(" Detergent.scrub()");
    super.scrub(); // Call base-class version
  }
  // Add methods to the interface:
  public void foam() { append(" foam()"); }
  // Test the new class:
  public static void main(String[] args) {
    Detergent x = new Detergent();
    x.dilute();
    x.apply();
    x.scrub();
    x.foam();
    x.print();
    System.out.println("Testing base class:");
    Cleanser.main(args);
  }


} ///:~


树种解释:

在scrub()里,不可只是简单地发出对scrub()的调用。那样便造成了递归调用,我们不愿看到这一情况。为解决这个问题,Java提供了一个super关键字,它引用当前类已从中继承的一个“超类”(Superclass)。所以表达式super.scrub()调用的是方法scrub()的基础类版本。

大家看看怎么就递归了?

|
在class Detergent里引用他本身的scrub()方法就造成递归
相当于

  public void scrub() {
    append(" Detergent.scrub()");
    scrub(); // Call base-class version
  }
在执行第三行时又回到第一行开始执行。  
所以书里scrub() 用super.scrub()引用它的父类clean.scrub()方法

|
因为你的scrub()在其内部又要调用scrub(),如果没有super这个关键字的话,他会自动调用你当前类的重载版本,也就造成了自己在内部调用自己的情况,也就造成了低轨。用了super以后,他调用的就是他基类的scrub(),也就是另一个不同的方法,所以就没有递归了。

|
自己调用自己,是很明显的递归,如果用super,调用夫类的函数自然就不递归了

|
用super调用父类的方法,因为如果在继承方法中调用等于是自己调用自己,永无止境!

    
 
 
 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 看看thinkinjava这里是什么意思?
  • thinkinjava:我的结果和书上的不同...................谁看过,讨论


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3