【程序实例】

 import java.util.*;

 class Characteristic {
private String s;
Characteristic(String s) {
this.s=s;
System.out.println("Creating Characteristic "+s);
}
protected void dispose() {
System.out.println("Disposing Characteristic "+s);
}
} class Description {
private String s;
Description(String s) {
this.s=s;
System.out.println("Creating Description "+s);
}
protected void dispose() {
System.out.println("Disposing Description "+s);
}
} class LivingCreature {
private Characteristic p=new Characteristic("is alive");
private Description t=new Description("Basic Living Creature");
LivingCreature() {
System.out.println("LivingCreature()");
}
protected void dispose() {
System.out.println("LivingCreature dispose");
t.dispose();
p.dispose();
}
} class Animal extends LivingCreature {
private Characteristic p=new Characteristic("has heart");
private Description t=new Description("Animal not Vegetable");
Animal() {
System.out.println("Animal()");
}
protected void dispose() {
System.out.println("Animal dispose");
t.dispose();
p.dispose();
super.dispose();
}
} class Amphibian extends Animal {
private Characteristic p=new Characteristic("can live in water");
private Description t=new Description("Both water and land");
Amphibian() {
System.out.println("Amphibian()");
}
protected void dispose() {
System.out.println("Amphibian dispose");
t.dispose();
p.dispose();
super.dispose();
}
} public class Frog extends Amphibian {
private Characteristic p=new Characteristic("Croaks");
private Description t=new Description("Eats Bugs");
public Frog() {
System.out.println("Frog()");
}
protected void dispose() {
System.out.println("Frog dispose");
t.dispose();
p.dispose();
super.dispose();
} public static void main(String[] args) {
Frog frog=new Frog();
System.out.println("Bye!");
frog.dispose();
}
}

【运行结果】

 Creating Characteristic is alive
Creating Description Basic Living Creature
LivingCreature()
Creating Characteristic has heart
Creating Description Animal not Vegetable
Animal()
Creating Characteristic can live in water
Creating Description Both water and land
Amphibian()
Creating Characteristic Croaks
Creating Description Eats Bugs
Frog()
Bye!
Frog dispose
Disposing Description Eats Bugs
Disposing Characteristic Croaks
Amphibian dispose
Disposing Description Both water and land
Disposing Characteristic can live in water
Animal dispose
Disposing Description Animal not Vegetable
Disposing Characteristic has heart
LivingCreature dispose
Disposing Description Basic Living Creature
Disposing Characteristic is alive

总结:

  1.java中进行清理时要小心,在清理函数dispose()中数据成员的销毁顺序应该与声明的顺序相反,并且记得要调用基类的清理函数对基类进行清理(采用super.dispose()语句实现);

  2.对于字段,与声明的顺序相反进行清理;对于基类,应该首先对其导出类进行清理,然后才是基类(这是因为导出类的清理可能会调用基类中的某些方法,所以需要基类中的构件仍起作用而不应该过早地销毁它们。)

  3.对象的所有部分都是按照创建的逆序进行销毁。

Java继承与清理的更多相关文章

  1. Java继承与组合

    Java继承与组合 继承 java 中使用extends关键字表示继承关系,当创建一个类时,如果没有明确指出要继承的类,则是隐式地从根类Object进行继承. 子类继承父类的成员变量 子类能够继承父类 ...

  2. JAVA继承时构造函数的问题

    今天看到java继承部分时,关于构造函数是否继承以及如何使用时遇到了点问题,后来查找相关资料解决了. 下面是我个人的总结: 先创建一个父类,里面有两个构造函数: public class Jisuan ...

  3. Java继承和接口

    接口最关键的作用,也是使用接口最重要的一个原因:能上溯造型至多个基础类.使用接口的第二个原因与使用抽象基础类的原因是一样的:防止客户程序员制作这个类的一个对象,以及规定它仅仅是一个接口.这样便带来了一 ...

  4. Java继承的初始化

    /** * Created by xfyou on 2016/11/2. * Java继承的初始化 */ public class Beetle extends Insect { int k = pr ...

  5. Java—继承、封装、抽象、多态

    类.对象和包 1) 面向对象编程(Object Oriented Programming ,简称 OOP):20世纪70年代以后开始流行. 2) 结构化编程与面向对象编程的区别: A. 在结构化编程中 ...

  6. java继承关系中成员变量,构造方法,成员方法的关系

    Java继承中的成员关系 A:成员变量 a:子类的成员变量名称和父类中的成员变量名称不一样,这个太简单写那个名字就访问那个名字! b:子类的成员变量名称和父类中的成员变量名称一样,这个怎么访问呢? 子 ...

  7. JAVA继承时this和super关键字

    JAVA继承时this和super关键字 本文主要讨论在方法前使用this或super关键字时,编译器在什么地方查找对应的函数. 在子类中指定this关键字.首先在本类中查找,如果本类中找不到,再在父 ...

  8. JAVA 继承中的this和super

    学习java时看了不少尚学堂马士兵的视频,还是挺喜欢马士兵的讲课步骤的,二话不说,先做实例,看到的结果才是最实际的,理论神马的全是浮云.只有在实际操作过程中体会理论,在实际操作过程中升华理论才是最关键 ...

  9. java 继承、重载、重写与多态

    首先是java 继承.重载和重写的概念 继承: 继承的作用在于代码的复用.由于继承意味着父类的所有方法亦可在子类中使用,所以发给父类的消息亦可发给衍生类.如果Person类中有一个eat方法,那么St ...

随机推荐

  1. [转] splice系列系统调用

    关注splice系列系统调用(包括splice,tee和vmsplice)已经有一段时间了,开始的时候并未能领会splice的意义所在,致使得出了“splice系列系统调用不怎么实用”的错误结论.随着 ...

  2. IntelliJ IDEA 中module的dependencies是其它module时的注意事项

    Dependencies on other modules If a module (module A) depends on another module (module B), IntelliJ ...

  3. jQuery源代码 解析一 工具方法

    1. 外层沙箱以及命名空间$ 几乎稍微有点经验前端人员都这么做,为了避免声明了一些全局变量而污染,把代码放在一个"沙箱执行",然后在暴露出命名空间(可以为API,函数,对象): 2 ...

  4. mwc config.h 中文注释

    #ifndef CONFIG_H_ #define CONFIG_H_ /*************************************************************** ...

  5. JSON 格式化为易读格式的字符串

    算法 http://blog.csdn.net/yanghaitaohhh/article/details/39672783 使用算法如下: 对输入字符串,逐个字符的遍历 1.获取当前字符. 2.如果 ...

  6. 01-资料管理器(Directory/DirectoryInfo操作文件夹类)

    public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void Form1_Loa ...

  7. asp.net微信开发第二篇----消息应答

    当普通微信用户向公众账号发消息时,微信服务器将POST消息的XML数据包到开发者填写的URL上. 请注意: 1.关于重试的消息排重,推荐使用msgid排重. 2.微信服务器在五秒内收不到响应会断掉连接 ...

  8. Debugging Failed Because Integrated Windows Authentication Is Not Enabled

    To enable integrated Windows authentication Log onto the Web server using an administrator account. ...

  9. j2ee开发中的“java容器”和“web容器”有什么区别?

    http://blog.csdn.net/zi_jun/article/details/7387259

  10. prototype constructor __proto__

    constructor, prototype, __proto__ 详解