Ray's playground

 

Reusing Classes(Thinking in Java)

  Java’s final keyword has slightly different meanings depending on the context, but in general it says “This cannot be changed.” You might want to prevent changes for two reasons: design or efficiency. Because these two reasons are quite different, it’s possible to misuse the final keyword.
  The following sections discuss the three places where final can be used: for data, methods, and classes.

  final data

  Many programming languages have a way to tell the compiler that a piece of data is “constant.” A constant is useful for two reasons:

  1.It can be a compile-time constant that won’t ever change.

  2.It can be a value initialized at run time that you don’t want changed. 

  Blank finals

  Java allows the creation of blank finals, which are fields that are declared as final but are not given an initialization value. In all cases, the blank final must be initialized before it is used, and the compiler ensures this. However, blank finals provide much more flexibility in the use of the final keyword since, for example, a final field inside a class can now be different for each object, and yet it retains its immutable quality. 

  final arguments

  Java allows you to make arguments final by declaring them as such in the argument list. This means that inside the method you cannot change what the argument reference points to.

  final methods

  There are two reasons for final methods. The first is to put a “lock” on the method to prevent any inheriting class from changing its meaning. This is done for design reasons when you want to make sure that a method’s behavior is retained during inheritance and cannot be overridden. The second reason for final methods is efficiency. In earlier implementations of Java, if you made a method final, you allowed the compiler to turn any calls to that method into inline calls.

  final and private

  Any private methods in a class are implicitly final. Because you can’t access a private method, you can’t override it. You can add the final specifier to a private method, but it doesn’t give that method any extra meaning. 

  final classes

  When you say that an entire class is final (by preceding its definition with the final keyword), you state that you don’t want to inherit from this class or allow anyone else to do so. In other words, for some reason the design of your class is such that there is never a need to make any changes, or for safety or security reasons you don’t want subclassing. 

 

posted on 2010-01-22 23:30  Ray Z  阅读(211)  评论(0编辑  收藏  举报

导航