【问题标题】:Why does getHeight() method not work in the constructor?为什么 getHeight() 方法在构造函数中不起作用?
【发布时间】:2011-06-20 16:29:42
【问题描述】:

这是代码:

    import acm.program.*; 

    public class test extends GraphicsProgram{ 

        public test(){ 

           println(getHeight()); 

        } 

        public void run(){ 

          println(getHeight()); 

        } 

    }

执行结果为0 472。为什么构造函数中的getHeight()返回0,而run()返回472,这才是真正的值?

【问题讨论】:

标签: java methods constructor acm-java-libraries


【解决方案1】:

直到init()方法才设置高度,该方法在run()方法之前执行。

【讨论】:

  • 如果我必须调用 getHeight() 方法而没有 run() 方法,例如:类 test 用作子类,它不一定有 run( ) 方法;并且主类将创建这个类的对象 test 实际运行的 getHeight() 方法。
  • 覆盖子类的init()方法,确保在尝试访问getHeight()方法之前调用super.init()
  • 忍受我,但我又失败了..这是我的代码:1)(要使用的类)import acm.graphics.*; public class test extends GCanvas{ public int x; public void init(){ x = getHeight(); } } 2)(主要执行类)import acm.program.*; public class test2 extends ConsoleProgram{ public void run(){ test a = new test(); a.init(); println(a.x); } } 仍然返回零.. ..
  • 你现在扩展了一个不同的类,但基本上你有 public void init(){ x = getHeight(); } 调用 public void init(){ super.init(); x = getHeight(); }
  • 感谢您的回答,但这真的让我发疯......当我尝试添加行时 super.init(); Eclipse 说 init() 未定义类型 GCanvas.. 所以我改变了GCanvas 回到 GraphicsProgram。来自 Eclipse 的警告消失了,但是当我运行程序 test2 时,getHeight() 仍然返回零..
【解决方案2】:

一个项目最初没有高度。您很可能在组件布局或指定高度之前调用 getHeight()。

【讨论】:

  • 如果我必须调用 getHeight() 方法而没有 run() 方法,例如:类 test 用作子类,它不一定有 run( ) 方法;并且主类将创建这个类的对象 test 实际运行的 getHeight() 方法。
  • test 的子类总是有一个 run 方法,因为 test 有一个 run 方法。无论哪种方式,都需要先设置高度,然后才能访问该值。
  • 很抱歉使用了误导性的词 subclass .. 带一个启动器 .. 我真正的意思是另一个类,名为 main_class(带有 run 方法),它没有层次关系。 main_class 将创建一个 test* 类的对象(没有运行方法)。如果我想让 *test 类中的 getHeight() 获取它的功能,该怎么办。
  • 这两个例子都与核心问题完全无关。我认为您不了解代码实际在做什么。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-08-24
  • 1970-01-01
  • 2022-07-29
  • 1970-01-01
  • 2023-03-17
  • 2022-01-04
  • 2019-04-30
相关资源
最近更新 更多