posts - 12,  comments - 0,  trackbacks - 0
访问控制符:public 、private、protected、friendly
public包内包外均可访问。
private只有本类可访问。
protected针对继承而使用的:1、包内继承,因为在包内,声明为protected不影响它本来的friendly权限。
                           2、包外继承,必须声明为protected。
派生类可以访问基类的protected成员。
注意不可将类设成private(那样会使除类之外的其他东西都不能访问它),也不能设成protected。因此,我们现在对于类的访问只有两个选择:“友好的”或者public。若不愿其他任何人访问那个类,可将所有构建器设为private,这样除你之外,没有可以用类创建的了。而你可以使用static成员创建对象。
package com.access.external;

class Soup{
    private Soup(){//构造函数声明为private,其它类不能用此构造函数创建对象;
        System.out.println("sffewe");
    }
    public static Soup makSoup(){//其它类可通过makSoup来创建对象;
        return new Soup();
    }
    private static Soup ps1 = new Soup();//自己创建对象;
    public static Soup access(){//返回对象的引用。
        return ps1;
    }
    public void f(){}
}

class Sandwich{
    void f(){
        new Lunch();
    }
}

public class Lunch {
    void test(){
        //Soup priv1 = new Soup();
        Soup priv2 = Soup.makSoup();
        Sandwich f1 = new Sandwich();
        Soup.access().f();//不创建对象,但通过Soup中返回的对象引用调用其方法。
    }

}


该方法返回一个句柄,它指向类Soup的一个对象。
Soup类向我们展示出如何通过将所有构建器都设为private,从而防止直接创建一个类。请记住,假若不明确地至少创建一个构建器,就会自动创建默认构建器(没有自变量)。若自己编写默认构建器,它就不会自动创建。把它变成private后,就没人能为那个类创建一个对象。但别人怎样使用这个类呢?上面的例子为我们揭示出了两个选择。第一个选择,我们可创建一个static方法,再通过它创建一个新的Soup,然后返回指向它的一个句柄。如果想在返回之前对Soup进行一些额外的操作,或者想了解准备创建多少个Soup对象(可能是为了限制它们的个数),这种方案无疑是特别有用的。
第二个选择是采用“设计方案”(Design Pattern)技术,本书后面会对此进行详细介绍。通常方案叫作“独子”,因为它仅允许创建一个对象。类Soup的对象被创建成Soup的一个static private成员,所以有一个而且只能有一个。除非通过public方法access(),否则根本无法访问它。



posted on 2007-12-20 11:09 仰望者 阅读(223) 评论(0)  编辑  收藏

只有注册用户登录后才能发表评论。


网站导航: