如何在java中编译Object类的toString()方法?

时间:2016-04-19 11:01:17

标签: java oop

Object类是每个类的基类,即每个类都扩展Object类。 Object类中有一个公共的String toString()方法,并且String类中也存在相同的方法。 现在,String类还扩展了Object类,方法toString返回String类型。

我的问题是:在编译Object类时,它将搜索String.class,String类将搜索Object.class,从而创建一种相互依赖性。如何解决这种依赖?编译机制如何工作?如果我错了,请纠正我。

2 个答案:

答案 0 :(得分:4)

Java编译器是Multi-Pass Compiler。这意味着编译过程中有增量步骤。在编译Object时,它使用String的临时表示,以便允许Object进行编译。

您可以将临时表示与某种隐藏界面进行比较。编译器编译到该接口。只有在运行时,编译的部分才会聚集在一起 - 编译器不需要一个完全编译的类来编译另一个类,只需要它的抽象。

答案 1 :(得分:2)

实际上,当你写这样的代码时:

public class Class1 
{
 public Class2 giveClass2()
 {
  return new Class2();
 }
}
public class Class2 : Class1 { }

它正确编译,因为它没有实例化任何东西。编译器只检查您使用的类型是否已定义。

但是,如果你按如下方式编写:

    public class Class1
    {
        public Class1(){
            aClass2 = new Class2();
        }
        public Class2 aClass2;
    }

    public class Class2 : Class1
    {

    }

这也将被编译,但它会在运行时导致堆栈溢出,因为循环依赖会影响。