Topic |
Notes |
Object-Oriented Hierarchy "Is A" vs "Has A" |
"Is A" - is a subclass of a
superclass (ex: extends)
"Has A" - has a reference to (ex: variable, ref to object).Shape is abstract in design. Shape wants every child to have an area() method.
- abstract class Shape
- abstract double area();
Square, Circle is a Shape:
- class Square extends Shape
- class Circle extends Shape
Circle has a Area:
- double dblArea;
- double area() {return dblArea; }
Note:
- This example is fairly easy to conceptualize. Some designs are difficult.
- Creating class hierarchies falls somewhere between engineering and craft.
|
Access Control |
Access Control - a way to limit the access
others have to your code.
- Same package - can access each others variables and methods,
except for private members.
- Outside package - can access public classes. Next, can access
members that are public. Also, can access protected members if the class is a subclass of
that class.
Same package - use package keyword in first line of source file, or no
package keyword and in same directory.
Keywords - Access Control
- public - outside of package access.
- [no keyword] - same package access only.
- protected - same package access. Access if class is a subclass of, even
if in another package.
- private - same class access only.
Members (Class, Methods, & Variables) - if the "access
control keyword" can be used with the member, the above concepts apply. |
Role in Hierarchy |
Hierarchy deals with the design of classes
(super classes, subclasses, methods, overriding methods, etc
). It may limit their
ability to extend or inherit your code. It may force others to code certain behaviors into
their classes. Keywords - Role in Hierarchy
- abstract - used to force a design. Cannot instantiated.
- final - Cannot be changed.
- static - exists with the class. Exists only once!
- * native - platform dependent code (ex: C).
- *volatile - variable is not stable among threads.
- *synchronized - method is invoked by one thread at a time.
- *transient - will not be serialized to a stream when writing an object.
Members (Class, Methods, & Variables) - if the "access
control keyword" can be used with the member, the above concepts apply. |
Class |
Class Access &
Hierarchy Keywords |
Class-Keywords |
Access Control
- no keyword - package access
- public - outside package access.
Role in Hierarchy (design)
- abstract - class cannot be instantiated.
- final - class cannot be subclassed (extended).
|
Invalid/Compile Errors |
- Class abstract & final (an abstract class should be extended,
final cannot!)
|
Class-no keyword |
|
Class-public |
- If you import a package, you can only access those package classes
that are declared public.
- Can be accessed by all classes.
- Must be in its own .java source file.
- Can only be one public class per .java source file. If you do define a
public class, the source file must be named after the class.
|
Class-abstract |
- Class must be abstract if it has an abstract method.
- Class cannot be instantiated.
- Class can be abstract even, if no methods are declared as abstract.
- (Ex: wrappers all subclass from Number which is abstract.)
- You can force a certain design. (see Number class).
|
Class-final |
- Class can not be subclassed (extended).
- (Ex: Double, Integer, Long, Float, String.)
- Your design is more secure. Code is optimized for speed because the
reference can be constant, not a lookup reference.
- If a class cannot be subclassed, then none of the methods can be
overlaided.
|
Method |
Method Access &
Hierarchy Keywords |
Method-Keywords |
If access to Class, then: Access Control
- no keyword - package access.
- public - inside & outside package access.
- protected - package access or access if subclassed.
- private - this class only access.
Role in Hierarchy (design)
- abstract - design. No code.
- final - cannot be overloaded
- static - belongs to class. Can be accessed without instantiation.
- synchronized - method can be invoked by one thread at a time.
|
Invalid/Compile Errors |
- Method abstract & static (why? a static method cannot be
overridden, abstract must be!)
- Method abstract & final (a final method cannot be overridden,
abstract must be!)
|
Method-no keyword |
- Method can be accessed by classes in the same package.
|
Method-public |
- Method can be accessed by any class
|
Method-private |
- Method can be accessed by other methods within the class.
- No access by package or outside package.
|
Method-protected |
- Method can be accessed by package.
- Method can be accessed by any subclass of this class.
|
Method-abstract |
- Has no defined code, therefore class must be abstract.
- Defines the method's signature, return value, and the exceptions it
throws.
- You can force a certain design. Concrete classes must override the
method.
- The class must then be abstract.
- Method - must be overridden, or subclass will be abstract .
- ex: public String getVersion(); ( notice no "{ }", use
";" )
|
Method-final |
- No subclass can override the method.
- If final, the method cannot be abstract!
- Optimizes code for speed.
|
Method-static |
- Can be accessed without instantiation.
- Cannot be overlayed, therefore cannot be abstract.
|
Method-synchronized |
- Method can only be invoked by one thread at a time.
- Apply to class mehods, instance methods or code blocks. Variables can not
be!
- Can be static or non-static.
- If non-static - no other thread can invoke any other synchronized
instance method for that object.
- If static - no other thread can invoke any other synchronized
static method for that class
|
Method-native |
- Method is a platform dependent language, not Java.
|
Variables |
Variables Access &
Hierarchy Keywords |
Variables-Keywords |
If access to Variable, then: Access Control
- no keyword - package access.
- public - inside & outside package access.
- protected - package access or access if subclassed.
- private - this class only access.
Role in Hierarchy (design)
- final - cannot be overloaded
- static - belongs to class. Can be accessed without instantiation.
- volatile -may change asynchronously with threads
- transient - will not be serialized
|
Invalid/Compile Errors |
Cannot be: (Compile errors)
- abstract, native, synchronized.
- local variable cannot be static
|
Variables-static |
- Belongs to the class
- Exists exactly once for a class, no matter how many instances are
created.
- Can not use: this.intMyVar (this refers to a non-static (object)
member)
- A local variable cannot be declared static. You will get some
interesting compile errors including "statement expected".
- Static Variables must be declared in the section just after the class
statement and before a method or constructor clause.
|
Variables-abstract |
Illegal! |
Variables-private |
Members only accessed by class in which
it is defined |
Variables-no keyword |
|
Variable-final |
- Value cannot be changed. It is constant.
|
Variable-volatile |
- A variable member may change asynchronously with threads
|
Variable-transient |
- Instance variables that are transient will not be serialized.
|
|
|
import |
- If you import a package, you can only access those package classes
that are declared public.
- If you import a package, you can only access those methods that
are declared public.
|
package |
|
|
|