隐藏实施过程

1.构建构造器时的一个特别有效的规则:尽可能简单的方法使对象进入就绪状态,如果可能尽量避免调用任何的方法,在构建器内唯一能够安全调用的是基类中具有final的属性方法(private也可,自动为final),这些方法不能被覆盖,不会受到子类的影响(基类的构造方法中调用该类中的抽象方法来对对象进行初始化,但该抽象方法已经被子类覆盖,那个在调用父类的构造方法的时候,根据动态绑定原则,会自动去调用被子类覆盖的方法,但由于参数的原因,使得该对象可能未被正确的初始化)。


2.在“上溯造型”中能够通过基类来调用子类的所有方法,那么必须保证子类只含有基类的所有方法,不含有额外的方法。此时我们为了能调用子类额外的方法,那么必须使用“下溯造型”,但“上溯造型”肯定是安全的,因为基础类不可能拥有一个比衍生类更大的接口,故能保证基础类发送的每一条消息衍生类都能接受到,但“下溯造型”就不行了。


 3.内部类:将一个类定义置于另一个类中,对内部类的需求并不会太明显,至少不会立即感觉到自己要使用内部类了,有种情况就是外部类有一个方法而这个方法的返回值就是内部类的句柄,想在外部类非static方法内部之外生成内部类的一个对象,必须将那个对象的类型设为“外部类.内部类”。使用内部类的情形:(1)我们准备实现某形式的接口,使自己能创建或返回一个句柄,例如:当我们准备上溯到一个基础类(特别是接口),内部类就开始发挥其关键作用了(从用于实现的对象来生成一个接口的句柄具有上溯造型到基础类相同的效果),代码在181,(2)要解决一个复杂的问题,并希望创建一个类,用来辅助自己的程序,并且不愿意将其公开,在方法的内部创建一个内部类,或者在任意的一个范围内创建一个内部类,但使用该内部类只能在内部类的内部,外部就不能调用了。还有匿名内部类,不是很清楚如何正确的使用它们。内部类有一个重要的特点就是可以范围该类中的被封装的私有成员变量。而且很重要的一点:就是内部类的对象默认持有创建它的那个封装类的一个对象句柄


4.final的使用:a.基本数据类型中使用final修饰表示该数据是一个常数,永远不能改变,并且必须要赋初值(可以是一个表达式),而如过是修饰一个句柄(即对象或数组),那么只是不能再将该句柄指向其他的新对象,但可以改变对象的属性或数值。当用static和final同时修饰时该数据就是一个全局常数(一般采用大写)。无论是将其定义为static还是定义为final,在编译期间都是不知道值的,只有在运行期(初始化)才知道。b.自变量用final修饰,如方法的参数被定为final,那么在方法内部不能改变该参数句柄所对应的对象,只能读取它。c.方法被final修饰,理由一:不想让继承类来覆盖和改写该方法,防止继承类改变它本来的含义。理由二:会使代码的执行效率变高。(但这样做要慎重)。


5.创建一个对象句柄:在下面情形下可以对其初始化一个对象。a.对象定义的时候,这意味着他们在构造器创建之前肯定得到了初始化。b.在那个类的构造器中。C.紧靠在实际要求使用那个类的时候。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值