JAVA基础学习篇----《thinking in java》第五章:隐藏实现
2008-01-09 12:40
344 查看
第五章:隐藏实现
访问控制符: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(),否则根本无法访问它。
访问控制符: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(),否则根本无法访问它。
相关文章推荐
- JAVA基础学习篇----《thinking in java》第三章:控制程序流程
- JAVA基础学习篇----《thinking in java》第一章:对象简介
- JAVA基础学习篇----《thinking in java》第四章:初始化与清理
- JAVA基础学习篇----《thinking in java》第六章:代码复用
- JAVA基础学习篇----《thinking in java》第七章:多态性
- 《Thinking in Java》学习笔记——第五章:隐藏实施过程
- JAVA基础学习篇----《thinking in java》第二章:万物皆对象
- Java实现文件的复制和新Nio包通道的运用--Thinking in java
- day4 part1:《Thinking in Java》笔记第五章---初始化与清理
- 再读thinking in java -- 第五章 初始化与清理
- 《Thinking in Java》笔记 - 第五章 - 初始化与清理
- 2018/01/07JAVA 基础 / 接口与继承:重写【子类继承并覆盖父类的对象方法】、隐藏【子类继承并覆盖父类的类方法】与实现类实现接口方法の区别
- Thinking in java基础之集合框架
- Thinking in java 个人笔记 第五章(持续更新ing)
- 【学习笔记】Thinking in java (第三版)第五章 隐藏实现(Hiding the implementation)
- Thinking in C++ learning(3)-----隐藏实现
- [Java Concurrency in Practice]第五章 基础构建模块
- thinking-in-java(20)注解基础
- Thinking in C++ learning(3)-----隐藏实现
- 《第五章 隐藏具体实现》总结