- Java code
import static net.mindview.util.Print.*;class Shape { Shape(int i) { print("Shape constructor"); } void dispose() { print("Shape dispose"); } }class Circle extends Shape { Circle(int i) { super(i); print("Drawing Circle"); } void Dispose() { print("Erasing circle"); super.dispose(); }}class Triangle extends Shape { Triangle(int i) { super(i); print("Drawing Triangle"); } void dipsose() { print("Erasing Triangle"); super.dispose(); }}class Line extends Shape { private int start, end; Line(int start, int end) { super(start); this.start = start; this.end = end; print("Drawing Line: " + start + ", " + end); } void dispose() { print("Erasing Line: " + start + ", " + end); super.dispose(); }}public class CADSystem16 extends Shape { private Circle c; private Triangle t; private Line[] lines = new Line[3]; public CADSystem16(int i) { super(i + 1); for(int j = 0; j < lines.length; j++) lines[j] = new Line(j, j*j); c = new Circle(1); t = new Triangle(1); print("Combined constructor"); } public void dispose() { print("CADSystem.dispose()"); // The order of cleanup is the reverse // of the order of initialization t.dispose(); c.dispose(); for(int i = lines.length - 1; i >= 0; i--) lines[i].dispose(); super.dispose(); } public static void main(String[] args) { CADSystem16 x = new CADSystem16(47); try { print("Returning from try block"); return; // unreachable statement: // print("You can't see this"); // but finally block will still execute: } finally { x.dispose(); } } }
能通过编译,运行结果很奇怪:
Shape constructor
Shape constructor
Drawing Line: 0, 0
Shape constructor
Drawing Line: 1, 1
Shape constructor
Drawing Line: 2, 4
Shape constructor
Drawing Circle
Shape constructor
Drawing Triangle
Combined constructor
Returning from try block
CADSystem.dispose()
Shape dispose
Shape dispose
Erasing Line: 2, 4
Shape dispose
Erasing Line: 1, 1
Shape dispose
Erasing Line: 0, 0
Shape dispose
Shape dispose
我的疑问在红色字体的部分
其中Circle和Triangle这两个Shape的子类中的void dispose()没有得到完整的调用,只输出了Shape dispose
但是Line这个Shape子类中的void dispose()却得到了完整的调用:
Erasing Line: 2, 4
Shape dispose
我觉得很矛盾,请问覆盖后的父类方法到底能不能调用?
------解决方案--------------------
楼主
- Java code
class Circle extends Shape { Circle(int i) { super(i); print("Drawing Circle"); } void Dispose() { print("Erasing circle"); super.dispose(); }}class Triangle extends Shape { Triangle(int i) { super(i); print("Drawing Triangle"); } void dipsose() { print("Erasing Triangle"); super.dispose(); }}
------解决方案--------------------
拼错了
还是仔细一点好
还有最好不要这样用
为什么一定要用这么相似的名字
换一个名字吧
------解决方案--------------------
首先不知道楼主在哪里抄来的东西,发在这里害的大家花了那么长时间来帮你调试。
其次您真的重写方法。方法名写错了,建议:加上@Override,在被重写的方法上,但是需要在jdk1.5版本以上,
其他楼主也没问。
就到这里吧。
代码我帮该了: