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

合成技术中的super.method()

    来源: 互联网  发布时间:2017-04-01

    本文导语:  class DoBaseFinalization {   public static boolean flag = false; } class Characteristic {   String s;   Characteristic(String c) {     s = c;     System.out.println(       "Creating Characteristic " + s);   }   protected void finalize() { ...

class DoBaseFinalization {
  public static boolean flag = false;
}

class Characteristic {
  String s;
  Characteristic(String c) {
    s = c;
    System.out.println(
      "Creating Characteristic " + s);
  }
  protected void finalize() {
    System.out.println(
      "finalizing Characteristic " + s);
  }
}

class LivingCreature {
  Characteristic p = 
    new Characteristic("is alive");
  LivingCreature() {
    System.out.println("LivingCreature()");
  }
  protected void finalize() {
    System.out.println(
      "LivingCreature finalize");
    // Call base-class version LAST!
    if(DoBaseFinalization.flag)
      try {
        super.finalize();       // 请大家解释一下此处的super
      } catch(Throwable t) {}
  }
}
此类采用的是合成技术,super.finalize();怎么调用的是Characteristic类中的
protected void finalize() {
    System.out.println(
      "finalizing Characteristic " + s);
  }
怎么不用p.finalize();???而用的是super.finalize();?如果是继承,用super.finalize();我就能理解了,大家给我解释一下



原代码如下:
//: Frog.java
// Testing finalize with inheritance

class DoBaseFinalization {
  public static boolean flag = false;
}

class Characteristic {
  String s;
  Characteristic(String c) {
    s = c;
    System.out.println(
      "Creating Characteristic " + s);
  }
  protected void finalize() {
    System.out.println(
      "finalizing Characteristic " + s);
  }
}

class LivingCreature {
  Characteristic p = 
    new Characteristic("is alive");
  LivingCreature() {
    System.out.println("LivingCreature()");
  }
  protected void finalize() {
    System.out.println(
      "LivingCreature finalize");
    // Call base-class version LAST!
    if(DoBaseFinalization.flag)
      try {
        super.finalize();
      } catch(Throwable t) {}
  }
}

class Animal extends LivingCreature {
  Characteristic p = 
    new Characteristic("has heart");
  Animal() {
    System.out.println("Animal()");
  }
  protected void finalize() {
    System.out.println("Animal finalize");
    if(DoBaseFinalization.flag)
      try {
        super.finalize();
      } catch(Throwable t) {}
  }
}

class Amphibian extends Animal {
  Characteristic p = 
    new Characteristic("can live in water");
  Amphibian() {
    System.out.println("Amphibian()");
  }
  protected void finalize() {
    System.out.println("Amphibian finalize");
    if(DoBaseFinalization.flag)
      try {
        super.finalize();
      } catch(Throwable t) {}
  }
}

public class Frog extends Amphibian {
  Frog() {
    System.out.println("Frog()");
  }
  protected void finalize() {
    System.out.println("Frog finalize");
    if(DoBaseFinalization.flag)
      try {
        super.finalize();
      } catch(Throwable t) {}
  }
  public static void main(String[] args) {
    if(args.length != 0 && 
       args[0].equals("finalize"))
       DoBaseFinalization.flag = true;
    else
      System.out.println("not finalizing bases");
    new Frog(); // Instantly becomes garbage
    System.out.println("bye!");
    // Must do this to guarantee that all 
    // finalizers will be called:
    System.runFinalizersOnExit(true);
  }
} ///:~

|
问:怎么不用p.finalize();???而用的是super.finalize();?如果是继承,用super.finalize();我就能理解了,大家给我解释一下?
答:我的理解是这样,其实这个super.finalize();它并不是调用class Characteristic的 finalize()方法,但是它上面没有任何继承对象,也就是说,它上面就是Object了,因此呢?它就首先将将自己回收了,但是自己类中定义了一个p,所以就需要先将p回收了。

    
 
 

您可能感兴趣的文章:

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












  • 相关文章推荐
  • 和弦模拟建模合成器 amSynth
  • 电子声音合成器 Minicomputer
  • midi合成算法 FluidSynth
  • 声音合成器 hexter
  • 语音合成软件 NeXTeNS
  • 开源音乐合成软件 ZynAddSubFX
  • Balsa 异步电路仿真和合成系统
  • 实时音频合成器 TerminatorX
  • 视频合成软件 Natron
  • 语音合成引擎 Festvox
  • 语音合成引擎 MBROLA
  • 语音合成软件 Festival
  • 语音合成引擎 Flite
  • 有把两个静态库.a合成一个静态库的简单方法吗
  • 如何将Linux三张光盘整合成一张
  • shell 如何将以下两条表达式合成一条呢?
  • 在servlet里面用xml和xslt合成html文件,在ie5里面能正常显示,ie6里面不能正常显示!
  • linux下使用什么库对jpeg图片进行合成比较好?
  • 如何用变量来组合成常量,大家看看这个例子
  • gcc 如何把一大堆.o文件给组合成一个大的.a文件?


  • 站内导航:


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

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

    浙ICP备11055608号-3