RELATEED CONSULTING
相关咨询
选择下列产品马上在线沟通
服务时间:9:30-18:00
你可能遇到了下面的问题
关闭右侧工具栏
Thinking:类访问笔记
  • 作者:zhaozj
  • 发表时间:2020-12-23 10:39
  • 来源:未知

以下是TIJ中的代码:

class Soup {  private Soup() {}  // (1) Allow creation via static method:  public static Soup makeSoup() {    return new Soup();  }  // (2) Create a static object and  // return a reference upon request.  // (The "Singleton" pattern):  private static Soup ps1 = new Soup();  public static Soup access() {    return ps1;  }  public void f() {}}

class Sandwich { // Uses Lunch  void f() { new Lunch(); }}// Only one public class allowed per file:public class Lunch {  void test() {    // Can't do this! Private constructor:    //! Soup priv1 = new Soup();    Soup priv2 = Soup.makeSoup();    Sandwich f1 = new Sandwich();    Soup.access().f();  }} ------------                                                                                                                                                           返回值是Soup的对象引用。这里这个类是一个自引用的类,JDK中util包中如LinkedList之类就是这样实现的。access是一个静态方法,所以应该用类名直接调用。而且,access()返回一个Soup对象,所以可以访问类方法f.

不能Soup priv1 = new Soup();因为构造函数是私有方法通过public static Soup access() {    return ps1;  }实际上等于调用了一次构造函数 Soup.access()返回的是Soup的一个对象,f()是Soup的一个非私有方法,用Soup的一个对象调用它在正常不过了所以:Soup.access().f();