ืชืึนืึถื
- ืืืื
- ืืืฉืงืื
- ืกืื ื ืืืฉืง
- ืืืฉืงืื ืคืื ืงืฆืืื ืืืื, ืฉืืืืช ืกืืืืืช ืืฉืืืืช ืืจืืจืช ืืืื
- ืฉืืขืืจืื ืืืคืฉืืื
- ืฉืืขืืจืื ืืืชื ื ืืชื ืื ืืฉืื ืื (ืงืืืข).
- ืฉืืขืืจืื ืื ืื ืืืืื
- ืจึฐืืึผืช
- ืึฐืจืึผืฉืึธื
- ืืจืืฉื ืืจืืื
- ืืจืืฉื ืืืจืื
- ืืืืืก
- ืฉืืขืืจืื ืืฉืืืืช ืืืจืื ืืช
- ืื ืืืื
- ืืืจื ืืช ืงืื ืืืงืืจ
1. ืืงืืื
ืื ืืฉื ื ืืืืื ืฉืคืช ืชืื ืืช ืืชื ืืฉืชืืฉ (ืื'ืืืื ืืื ื ืืืฆืืช ืืืคื), ืืงืคืื ืขื ืขืงืจืื ืืช ืขืืฆืื ืืืืื ืืื ืืืคืชื ืืืชืืืช ืงืื ื ืงื, ืืืื ืื ืืชื ืืืืืืช; ืืื ืืืฆืืจ ืืืชื ืืืืจื ืืืื ืืืชืืื ืืงืืืช ืืคืชืจืื ืืขืืืช. ืืืืง ืื ืฉื ืืืืจืื, ืื ืื ื ืืืืืื ืืืื ืืืื ื ืืื ืืื ืืืกืืกืืืช ืฉืฉืคืช Java ืืกืคืงืช ืืืืฆืื ืืื ืขืงืจืื ืืช ืขืืฆืื ืืืืืฅ ืืขืืืจ ืื ืืงืื ืืืืืืช ืขืืฆืื ืืืืืช ืืืชืจ. ืืืชืจ ืืืืง, ืื ื ืืืืืื ืืืื ืืืืฉืงืื ืืืืฉืงืื ืืืฉืชืืฉืื ืืฉืืืืช ืืจืืจืช ืืืื (ืชืืื ื ืืืฉื ื-Java 8), ืืืืงืืช ืืืคืฉืืืช ืืกืืคืืืช, ืืืืงืืช ืืืชื ื ืืชื ืืช ืืฉืื ืื, ืืจืืฉื, ืงืืืคืืืืฆืื, ืืืขืืื ืืืืฉ ืืืืื ืื ืจืืืช (ืื ืื ืืืฉืืช) ืืื ื ืืขื ื ืืงืฆืจื ื ืืืง 1 ืฉืืขืืจ
"ืืืฆื ืืืฆืืจ ืืืืฉืืื ืืคืฆืื" .
2. ืืืฉืงืื
ืืชืื ืืช ืืื ืื ืขืฆืืื , ืืืฉื ืืืืฉืงืื ืืืืื ืืช ืืืกืืก ืืคืืชืื ืืืืื . ืืงืฆืจื, ืืืฉืงืื ืืืืืจืื ืงืืืฆื ืฉื ืฉืืืืช (ืืืืื) ืืื ืืืืงื ืฉืืืจืฉืช ืชืืืื ืืืืฉืง ืืกืคืฆืืคื ืืื ืืืืืช ืืกืคืง ืืืฉืื ืฉื ืืฉืืืืช ืืืื: ืจืขืืื ืคืฉืื ืืืื ืื ืจื ืขืืฆืื. ืืฉืคืืช ืชืื ืืช ืจืืืช ืืฉ ืืืฉืงืื ืืฆืืจื ืืื ืื ืืืจืช, ืื Java ืืืืืื ืืกืคืงืช ืชืืืื ืืฉืคื ืืื. ืืืื ื ืกืชืื ืขื ืืืืจืช ืืืฉืง ืคืฉืืื ื-Java.
package com.javacodegeeks.advanced.design;
public interface SimpleInterface {
void performAction();
}
ืืงืืข ืฉืืืขืื, ืืืืฉืง ืืืื ืงืจืื ื
SimpleInterface
, ืืฆืืืจ ืจืง ืขื ืฉืืื ืืืช ืืฉื
performAction
. ืืืืื ืืขืืงืจื ืืื ืืืฉืงืื ืืืืืงืืช ืืื ืฉืืืฉืงืื ืืชืืจืื ืื ืฆืจืื ืืืืืช ืืืฉ ืืงืฉืจ (ืื ืืฆืืืจืื ืขื ืฉืืื), ืืื ืื ืืกืคืงืื ืืช ืืืืฉืื ืฉืืื. ืขื ืืืช, ืืืฉืงืื ื-Java ืืืืืื ืืืืืช ืืืจืืืื ืืืชืจ: ืื ืืืืืื ืืืืื ืืืฉืงืื ืืงืื ื ืื, ืืืืงืืช, ืกืคืืจืืช, ืืขืจืืช ืืงืืืขืื. ืืืืืื:
package com.javacodegeeks.advanced.design;
public interface InterfaceWithDefinitions {
String CONSTANT = "CONSTANT";
enum InnerEnum {
E1, E2;
}
class InnerClass {
}
interface InnerInterface {
void performInnerAction();
}
void performAction();
}
ืืืืืื ืืืืจืืืช ืืืชืจ ืืื, ืืฉื ื ืืกืคืจ ืืืืืืช ืฉืืืฉืงืื ืืืืืื ืืื ืชื ืื ืขื ืืื ื ืงืื ืื ืืืฆืืจืืช ืืชืืืืช, ืืืื ื ืืืคืืช ืขื ืืื ืืืืจ Java. ืงืืื ืื, ืื ืื ืื ืืืฆืืจื ืืืคืืจืฉ, ืื ืืฆืืจืช ืฉืืื ืืืืฉืง ืืื
ืฆืืืืจืืช (ืืืืืื ืืืืืช ืคืืืืืช ืืืื). ืืคืืื, ืืฆืืจืืช ืืฉืืื ืืืืืช ืฉืืืช ืขืจื:
public void performAction();
void performAction();
ืจืืื ืืืืืืจ ืฉืื ืฉืืื ืืืืืช ืืืืฉืง ืืืืจืืช ืืฆืืจื ืืจืืืืช
ืืืกืืจืงืืืช , ืืืคืืื ืืฆืืจืืช ืืฉืืื ืืืื ืฉืืืช ืขืจื:
public abstract void performAction();
public void performAction();
void performAction();
ืืืฉืจ ืืฉืืืช ืงืืืขืื ืืืฆืืจืื, ืื ืืกืฃ ืืืืืชื
ืฆืืืืจืืื , ืื ืื
ืกืืืืื ืืืืคื ืืจืืื ืืืกืืื ืื
ืืกืืคืืื . ืืื ืื ืืืฆืืจืืช ืืืืืช ืฉืืืช ืขืจื:
String CONSTANT = "CONSTANT";
public static final String CONSTANT = "CONSTANT";
ืืืกืืฃ, ืืืืงืืช, ืืืฉืงืื ืื ืกืคืืจืืช ืืงืื ื ืืช, ืื ืืกืฃ ืืืืืชื
ืฆืืืืจืืืช , ืืืืจืืืช ืื ืื ืืืจืืื
ืกืืืืืช . ืืืืืื, ืืฆืืจืืช ืืื ืืงืืืืืช ืื ื:
class InnerClass {
}
static class InnerClass {
}
ืืกืื ืื ืฉืชืืืจ ืืื ืืขืืคื ืืืฉืืช, ืื ืืืจืช ืืืืคืืื ืื ืืคืฉืืืื ืืืื ืฉื ืืืฉืงืื ืืืืื ืืืกืื ืืื ืืงืืื ืืืืชืจืช.
3. ืกืื ืืืฉืง
ืืืฉืง ืกืื ืืื ืกืื ืืืืื ืฉื ืืืฉืง ืฉืืื ืื ืฉืืืืช ืื ืืื ืื ืืงืื ื ืื ืืืจืื. ืืื ืกืคืจืืืช Java ืืืืืจื ืืช ืื:
public interface Cloneable {
}
ืกืื ื ืืืฉืง ืืื ื ืืืืื ืืฉืืขืฆืื, ืืื ืื ืืื ืืงื ืฉืืืืฉืืช ืืืื ื"ืืฆืืื" ืื "ืฉืืื" ืฉื ืชืืื ื ืืกืืืืช ืขื ืืืืงื. ืืืืืื, ืืืื
Cloneable , ืืืืืงื ืืกืืื ืช ื-cloneable, ืื ืืืืคื ืฉืื ื ืืชื ืื ืฆืจืื ืืืืฉื ืืืช ืืื ื ืืืง ืืืืืฉืง. ืขืื ืืืืื ืืคืืจืกืืช ืื ืคืืฆื ืืืื ืืกืื ืืืฉืง ืืื
Serializable
:
public interface Serializable {
}
ืืืฉืง ืื ืืกืื ืืช ืืืืืงื ืืืชืืืื ืืืืฉืื ืืืื-ืกืจืืืืืืฆืื, ืืฉืื, ืืื ืืื ื ืืฆืืื ืืืฆื ื ืืชื ืื ืฆืจืื ืืืืฉื ืืืช. ืืกืื ื ืืืฉืง ืืฉ ืืช ืืงืืื ืืชืื ืืช ืืื ืื ืขืฆืืื, ืืืจืืช ืฉืื ืืื ื ืืกืคืงืื ืืช ืืืืจื ืืขืืงืจืืช ืฉื ืืืฉืง ืืืืืช ืืืื.
4. ืืืฉืงืื ืคืื ืงืฆืืื ืืืื, ืฉืืืืช ืืจืืจืช ืืืื ืืฉืืืืช ืกืืืืืช
ืืื ืืฉืืจืืจ ืฉื Java 8, ืืืฉืงืื ืืื ืืืื ืชืืื ืืช ืืืฉืืช ืืืื ืืขื ืืื ืืช: ืฉืืืืช ืกืืืืืช, ืฉืืืืช ืืจืืจืช ืืืื ืืืืจื ืืืืืืืืช ื-lambdas (ืืืฉืงืื ืคืื ืงืฆืืื ืืืื). ืืกืขืืฃ ืืืืฉืงืื ืืืืฉื ื ืืช ืืขืืืื ืฉืืืฉืงืื ืื'ืืืื ืืืืืื ืืืฆืืืจ ืจืง ืขื ืฉืืืืช, ืื ืืื ื ืืกืคืงืื ืืช ืืืืฉืื ืฉืืื. ืขื ืฉืืืช ืืจืืจืช ืืืื, ืืืืจืื ืฉืื ืื: ืืืฉืง ืืืื ืืกืื ืฉืืื ืขื ืืืืช ืืืคืชื
ืืืืืืจืช ืืืจืืจืช ืืืื ืืืกืคืง ืื ืืืฉืื. ืืืืืื:
package com.javacodegeeks.advanced.design;
public interface InterfaceWithDefaultMethods {
void performAction();
default void performDefaulAction() {
}
}
ืืืืืชื ืืจืืช ืืืืคืข, ื ืืชื ืืขืงืืฃ ืืช ืฉืืืืช ืืจืืจืช ืืืืื ืขื ืืื ืื ืืืืืฉ ืืืฉืง, ืื ืืขืช ืืืฉืงืื ืืืืืื ืืืืื ืื ืฉืืืืช
ืกืืืืืช , ืืืืืื: ืืืืื com.javacodegeeks.advanced.design;
public interface InterfaceWithDefaultMethods {
static void createAction() {
}
}
ื ืืชื ืืืืจ ืฉืืชื ืืืืฉืื ืืืืฉืง ืืืืก ืืช ืื ืืืืจื ืฉื ืชืื ืืช ืืืืื. ืืื ืืฉื ื ืกืืืืช ืจืืืช ืืื ืฉืืชืืื ืืช ืืืื ืืืื ืกื ืืฉืคืช ื'ืืืื ืืื ืืฉื ื ืืื ืื ืฉืืืืฉืืืช ืื ืืืืืืืช, ืื ืฉื ืืฉืืืื ืืขืืืจ ืืฉืืืืฉ ืฉืื. ืืืฉืงืื ืคืื ืงืฆืืื ืืืื ืื ืกืืคืืจ ืืืจ ืืืืจื ืืืืืื ืืชืืกืคืืช ืฉืืืืฉืืืช ืืืื ืืฉืคื. ืืืกืืื ืฉื ืืืจ, ืืืฉืง ืคืื ืงืฆืืื ืื ืืื ืืืฉืง ืฉืขืืื ืืืฆืืจืช ืจืง ืฉืืื ืืืคืฉืืช ืืืช.
Runnable
ืืืฉืง ืืกืคืจืืื ืืกืื ืืจืื ืืื ืืืืื ืืืื ืืืื ืืืืฉื ืื.
@FunctionalInterface
public interface Runnable {
void run();
}
ืืืืจ Java ืืชืืืืก ืืืืฉืงืื ืคืื ืงืฆืืื ืืืื ืืฆืืจื ืฉืื ื ืืืืื ืืืคืื ืคืื ืงืฆืืืช lambda ืืืืืืฉ ืืืฉืง ืคืื ืงืฆืืื ืื ืืืงืื ืื ืื ืืืืื ื. ืืื ื ืืื ืืช ืชืืืืจ ืืคืื ืงืฆืื ืืื:
public void runMe( final Runnable r ) {
r.run();
}
ืืื ืืงืจืื ืืคืื ืงืฆืื ืื ื-Java 7 ืืืื, ืืฉ ืืกืคืง ืืืฉืื ืฉื ืืืืฉืง
Runnable
(ืืืืืื, ืืืืฆืขืืช ืืืืงืืช ืื ืื ืืืืืช), ืื ื-Java 8 ืืกืคืืง ืืกืคืง ืืืฉืื ืฉื ืฉืืืช run() ืืืืฆืขืืช ืชืืืืจ lambda:
runMe( () -> System.out.println( "Run!" ) );
ืื ืืกืฃ, ืืืขืจื
@FunctionalInterface (ืืืขืจืืช ืืืืกื ืืคืืจืื ืืืืง 5 ืฉื ืืืืจืื) ืืจืืืช ืฉืืืืืจ ืืืื ืืืืืง ืื ืืืฉืง ืืืื ืจืง ืฉืืื ืืืคืฉืืช ืืืช, ืื ืฉืื ืฉืื ืื ืฉืืืืฆืข ืืืืฉืง ืืขืชืื ืื ืืคืจ ืื ืื ืื .
5. ืฉืืขืืจืื ืืืคืฉืืื
ืืืฉื ืืขื ืืื ื ืืกืฃ ืฉื ืชืื ืขื ืืื ืฉืคืช ื'ืืืื ืืื ืืจืขืืื ืฉื ืืืืงืืช ืืืคืฉืืืช. ืืืืงืืช ืืืคืฉืืืช ืืืืืช ืืืงืฆืช ืืืืฉืงืื ื-Java 7 ืืื ืงืจืืืืช ืืืื ืืืืฉืง ืฉืืืช ืืจืืจืช ืืืืื ื-Java 8. ืฉืื ืืื ืืืืงืืช ืจืืืืืช, ืื ื ืืชื ืืืฆืืจ ืืืืงื ืืืกืืจืงืืืช, ืื ื ืืชื ืืกืืื ืืืชื ืืฉื ื (ืขืืื ืืกืขืืฃ ืืจืืฉื ืืคืจืืื ื ืืกืคืื). ืืฉืื ืืื, ืืืืงืืช ืืืคืฉืืืช ืืืืืืช ืืืืื ืฉืืืืช ืืืคืฉืืืช: ืกืื ืืืืื ืฉื ืืชืืื ืืื ืืืฉืื, ืืืฉ ืืื ืืืฉืง. ืืืืืื:
package com.javacodegeeks.advanced.design;
public abstract class SimpleAbstractClass {
public void performAction() {
}
public abstract void performAnotherAction();
}
ืืืืืื ืื, ืืืืืงื
SimpleAbstractClass
ืืืืจืืช ืืืืคืฉืืช
ืืืืืื ืฉืืื ืืืคืฉืืช ืืืฆืืจืช ืืืช. ืืืืงืืช ืืืคืฉืืืช ืืืื ืฉืืืืฉืืืช; ืจืื ืื ืืคืืื ืืืงืื ืฉื ืคืจืื ืืืืฉืื ืืืืืื ืืืืืช ืืฉืืชืคืื ืืื ืืืืงืืช ืืฉื ื ืจืืืช. ืื ืื ืื, ืื ืขืืืื ืืฉืืืจืื ืืช ืืืืช ืคืชืืื ืืืืคืฉืจืื ืื ืืืชืืื ืืืฉืืช ืืช ืืืชื ืืืืช ืืืืืขื ืืื ืืืช ืืชืชื ืืืืืงืืช ืืืืฆืขืืช ืฉืืืืช ืืืคืฉืืืช. ืจืืื ืืืืืืจ ืฉืื ืืืื ืืืืฉืงืื, ืฉืืืืืื ืืืืื ืจืง ืืฆืืจืืช
ืคืืืืืืช , ืืืืงืืช ืืืคืฉืืืช ืืืืืืช ืืืฉืชืืฉ ืืืืื ืืืื ืฉื ืืืื ื ืืืฉืืช ืืื ืืฉืืื ืื ืจืืืช ืฉื ืฉืืื ืืืคืฉืืช.
6. ืฉืืขืืจืื ืืืืืืื
ืื-ืฉืื ืื ืืืคื ืืฉืื ืืืชืจ ืืืืชืจ ืืคืืชืื ืชืืื ื ืืืืื ื. ืขืืืืชื ืฉื ืืขืจืืืช ืืจืืืืช ืืืืืช ืืขืืชื ืกืืืืืช ืจืืืช ืืงืฉืืจืืช ืืฉืืชืืฃ ื ืชืื ืื ืืืงืืืืืืช. ืืื ืืขืื ืืืช ืืืืื ืืชืขืืจืจื: ืืฆื ืงืื (ืื ืืคืืื ืืื) ืืฉืชื ื ืืืืื ืืืจืืื (ืืืจืืืืช) ืืืื ืืืชืจ ืืืื ืืงื ืงืื ืืืชืจ ืืืื ืืืขืจืืช. ืืืจืื ืืฆืขืจ, ืฉืคืช ื'ืืืื ืืื ื ืืกืคืงืช ืชืืืื ืืืื ื ืืืืชื ืืฉืชื ื ืืืืชื. ืขื ืืืช, ืืืืฆืขืืช ืฉืืืื ืฉื ืืื ืืงืืช, ื ืืชื ืืขืฆื ืืืืงืืช ืฉืืื ื ื ืืชื ืืช ืืฉืื ืื. ืงืืื ืื, ืื ืืฉืืืช ืฉื ืืืืชื ืืืืืื ืืืืืช ืกืืคืืื (ืืกืืื ืื ืืกืืคืืื
) . ืื ืืชืืื ืืืื, ืืื ืื ืื ืขืจืืื.
package com.javacodegeeks.advanced.design;
import java.util.Collection;
public class ImmutableClass {
private final long id;
private final String[] arrayOfStrings;
private final Collection<String> collectionOfString;
}
ืฉื ืืช, ืืื ืืชืืื ื ืืื: ืื ืฉืื ืืื ืืคื ืื ืืืืกืฃ ืื ืืขืจื, ืื ืชืงืฆื ืฉืืืช ืืื ืืฉืืจืืช ืืืจืืืื ืืื ืฉื ืื ืื, ืฆืืจ ืขืืชืงืื ืืืงืื ืืืช. ืื ืืืืื ืฉืืฆื ืืืืกืฃ ืื ืืืขืจื ืื ืืฉืชื ื ืืืืฆื ืื.
public ImmutableClass( final long id, final String[] arrayOfStrings,
final Collection<String> collectionOfString) {
this.id = id;
this.arrayOfStrings = Arrays.copyOf( arrayOfStrings, arrayOfStrings.length );
this.collectionOfString = new ArrayList<>( collectionOfString );
}
ืืืืกืืฃ, ืืืืืช ืืืฉื ื ืืืชื (ืืืจืื). ืขืืืจ ืืืกืคืื, ืืฉ ืืกืคืง ืืช ืืื-ืฉืื ืื ืืขืืืคื
Collections.unmodifiableXxx
: ืขื ืืขืจืืื, ืืืจื ืืืืืื ืืกืคืง ืื-ืฉืื ืื ืืืืชื ืืื ืืกืคืง ืขืืชืง ืืืงืื ืืืืืืจ ืืคื ืื ืืืขืจื. ืื ืืืื ืื ืืงืืื ืื ืงืืืช ืืื ืืขืฉืืช, ืฉืื ืื ืืืื ืชืืื ืืืืื ืืืขืจื ืืขืืื ืืืคืขืื ืืืฅ ืขืฆืื ืขื ืืืกืฃ ืืืฉืคื.
public String[] getArrayOfStrings() {
return Arrays.copyOf( arrayOfStrings, arrayOfStrings.length );
}
ืืคืืื ืืืืืื ืืงืื ื ืืื ื ืืชื ืช ืจืขืืื ืืื ืฉืืืชื ืืฉืชื ื ืขืืืื ืื ืืืจื ืืืฉืืจื ืืจืืฉืื ื ืื'ืืืื. ืืืืจืื ืืืืืื ืืืกืชืื ืื ืืืืืงื ืื ืืชื ืช ืืฉืื ืื ืืฉ ืฉืื ืฉืืชืืืืก ืืืืืืืงื ืฉื ืืืืงื ืืืจืช. ืื ืฉืืขืืจืื ืืื ืฆืจืืืื ืืืืืช ืืืชื ื ืืชื ืื ืืฉืื ืื, ืื ืืื ืืจื ืืืืืื ืืืช. ืืฉื ื ืืกืคืจ ืื ืชืื ืงืื ืืงืืจ ืืืื ืื ืฉื Java, ืืื FindBugs ื-PMD, ืฉืืืืืื ืืขืืืจ ืืืื ืขื ืืื ืืืืงืช ืืงืื ืฉืื ืืืฆืืขื ืขื ืคืืื ืชืื ืืช ื ืคืืฆืื ืฉื Java. ืืืืื ืืืื ืื ืืืจืื ื ืืืจืื ืฉื ืื ืืคืชื ื'ืืืื.
7. ืฉืืขืืจืื ืื ืื ืืืืื
ืืขืืื ืฉืืคื ื ื'ืืืื 8, ืฉืืขืืจืื ืื ืื ืืืืื ืืื ืืืจื ืืืืืื ืืืืืื ืฉืืฉืืขืืจืื ืืืืืจื ืชืื ืืื ืชื ืืขื ืืืืคืขืืื ืืืืคื ืืืืื. ืืืจืช ืืฉืืขืืจืื ืืื ืื ืืืืื ืืืืชื ืืฆืืฆื ืืช ื-boilerplate ืืืกืคืง ืืจื ืงืฆืจื ืืงืื ืืืืฆื ืืืชืืช ืืจืฉืืื. ืืืื ื ืกืชืื ืขื ืืืจื ืืืืืฉื ืช ืืืืคืืื ืืช ืืืืืื ืฉืจืฉืืจ ืืืฉ ืื'ืืืื:
package com.javacodegeeks.advanced.design;
public class AnonymousClass {
public static void main( String[] args ) {
new Thread(
new Runnable() {
@Override
public void run() {
}
}
).start();
}
}
ืืืืืื ืื, ืืืืฉืื ืฉื
Runnable
ืืืืฉืง ืืกืืคืง ืืืืคื ืืืืื ืืืืืงื ืื ืื ืืืืช. ืืืจืืช ืฉืืฉื ื ืืืืืืช ืืกืืืืืช ืืงืฉืืจืืช ืืืืืงืืช ืื ืื ืืืืืช, ืืืกืจืื ืืช ืืขืืงืจืืื ืฉื ืืฉืืืืฉ ืืื ืื ืชืืืืจ ืืื ืืื ืืืืืืื ืืืืชืจ ืฉ-Java ืืฉืคื ืืืืืืช. ืืคืืื ืจืง ืืืืงื ืื ืื ืืืืช ืฉืื ืขืืฉื ืืืื ืืืจืฉืช ืืคืืืช 5 ืฉืืจืืช ืงืื ืืื ืคืขื ืฉืืื ื ืืชื.
new Runnable() {
@Override
public void run() {
}
}
ืืืจืื ืืืื, ืขื Java 8, lambda ืืืืฉืงืื ืคืื ืงืฆืืื ืืืื, ืื ืืกืืจืืืืืืคืื ืืืื ืืืขืืื ืืงืจืื, ืกืืฃ ืกืืฃ ืืชืืืช ืงืื Java ืชืืจืื ืชืืฆืืชืืช ืืืืช.
package com.javacodegeeks.advanced.design;
public class AnonymousClass {
public static void main( String[] args ) {
new Thread( () -> { } ).start();
}
}
8. ื ืจืืืช
ืืืจ ืืืืจื ื ืงืฆืช ืขื ืืืื ืื ืจืืืช ืืื ืืืฉืืช ืื'ืืืื ืืืืง 1 ืฉื ืืืืจืื. ืืืืง ืื, ืื ืื ื ืืืืืื ืืืืืจ ืขื ืื ืืฉื ืืื ืฉืื, ืืื ืืืงืฉืจ ืฉื ืชืช-ืกืืืื.
ื ืจืืืช ืืจืืืช ืฉืื ืืช ืืืคืฉืจืช ืื ืืื ืขืช ืืืืืงืืช ืืจืืืช ืืืืงืืช ืื ืืืฉืงืื ืืืจืื (ืืืืืื, ืื ืื ื ืืฆืืืช ืืืืืืืช ืฉืื ืืช ืื ืืงืื ื ืืช ืื ืืื) ืื ืืืืงืืช ืืฉื ื ืืจืืืช ืืืืฉืช ืืฉืืืืช, ืืื ืืื ืืืฉืืืช ืฉื ืืืจืืื. ืืกืขืืฃ ืืื, ืืจืืฉื, ื ืจืื ืืืช ืืคืขืืื.
9. ืืจืืฉื
ืืจืืฉื ืืื ืืื ืืืืฉืื ืืืคืชื ืฉื ืชืื ืืช ืืื ืื ืขืฆืืื, ืืืฉืืฉืช ืืืกืืก ืืื ืืืช ืืืืงื ืฉื ืืขืจืืืช ืืืกืื. ืืฉืืืื ืขื ืืืื ื ืจืืืช ืื ืืืฉืืช, ืืืจืฉื ืืืคืฉืจืช ืืขืฆื ืืืืงืืช ืืืืจืจืืื ืฉื ืืชื ืืืจืืื ืืืชืืืง. ืืจืื ืืืืฉืืืช, ืชืืจืฉื ื-Java ืืืืฉืืช ืืืืฆืขืืช ืกืืืื ืืฉื ื ืืืืืช ืืืคืชื
extends , ืืื ืขื ืืืืงืช ืืื. ืชืช-ืืืืงื ืืืจืฉืช ืืช ืื ืืจืืืืื ืืฆืืืืจืืื ืืืืืื ืื ืฉื ืืืืงืช ืืื. ืื ืืกืฃ, ืชืช-ืืืืงื ืืืจืฉืช ืืช ืจืืืื ืืืืืื-ืคืจืืืื ืฉื ืืืืงืช ืืื ืฉืื ืื ืฉื ืืื (ืชืช-ืืืืงื ืืืืืงื) ื ืืฆืืื ืืืืชื ืืืืืื. ืขื ืืืช, ืืฉืื ืืืื, ืื ืืฉื ื ืื ืืชื ืื ืกื ืืขืฆื, ืืืืฆืื ืืกื ืืืื ืืืื ืฉื ืฉืืืืช ืฉืืืืงื ืืืฉืคืช ืืคืืืื ืื ืืชืชื ืืืืืงืืช ืฉืื. ืืืืืื, ืืืื ื ืกืชืื ืขื ืืืืืงื
Parent
ืืขื ืชืช ืืืืืงื ืฉืื
Child
ืืื ืืืืืื ืืช ืืืืื ืืจืืืช ืื ืจืืืช ืืืืฉืคืขืืช ืฉืืื.
package com.javacodegeeks.advanced.design;
public class Parent {
public static final String CONSTANT = "Constant";
private String privateField;
protected String protectedField;
private class PrivateClass {
}
protected interface ProtectedInterface {
}
public void publicAction() {
}
protected void protectedAction() {
}
private void privateAction() {
}
void packageAction() {
}
}
package com.javacodegeeks.advanced.design;
public class Child extends Parent implements Parent.ProtectedInterface {
@Override
protected void protectedAction() {
super.protectedAction();
}
@Override
void packageAction() {
}
public void childAction() {
this.protectedField = "value";
}
}
ืืจืืฉื ืืื ื ืืฉื ืืืื ืืืื ืืคื ื ืขืฆืื, ืขื ืืจืื ืคืจืืื ืขืืื ืื ืกืคืฆืืคืืื ืื'ืืืื. ืขื ืืืช, ืืฉื ื ืืื ืืืืื ืฉืงื ืืขืงืื ืืืจืืื ืืืืืืื ืืขืฉืืช ืืจืื ืืฉืืืจื ืขื ืงืืฆืจ ืืืืจืจืืื ืฉื ืืืืชื. ื-Java, ืื ืชืช-ืืืืงื ืืืืื ืืขืงืืฃ ืืช ืื ืืฉืืืืช ืฉืขืืจื ืืืจืืฉื ืฉื ืืื ืฉืื ืืื ืื ืื ืืื ืืืืจืื ืกืืคืืช. ืขื ืืืช, ืืื ืชืืืืจ ืื ืืืืช ืืคืชื ืืืืืืื ืืื ืืกืื ืฉืืื ืื ืืืงืช, ืื ืฉืขืืื ืืืืืื ืืืืืื.
ืื ืืกืืื ืฉืืืืื @Override ืืืฆืื : ืืื ืคืขื ืฉืืืืจื ืฉืื ืืื ืืขืงืืฃ ืฉืืื ืฉืขืืจื ืืืจืืฉื, ืื ื ืืฉืชืืฉ ืืืขืจืช
@Override ืืื ืืฆืืื ืืืชื ืืชืืฆืืชืืืช. ืืืืื ื ืืกืคืช ืืืชื ืืชืืืืืื ืืคืชืื Java ืื ืืืื ืืขืืฆืื ืืื ืื ืืืช ืืืจืจืืืืช ืืืืงืืช (ืขื ืืืืงืืช ืงืื ืงืจืืืืช ืื ืืืคืฉืืืช) ืืขืืืช ืืืฉืื ืืืฉืงืื. ืื ื ืืืืืฆืื ืืืื ืืืขืืืฃ ืืืฉืงืื ืขื ืคื ื ืืืืงืืช ืื ืืืืงืืช ืืืคืฉืืืช ืืืืืช ืืืคืฉืจ. ืืืฉืงืื ืงืืื ืืืชืจ, ืงืืื ืืืชืจ ืืืืืงื ืืืชืืืืงื, ืืื ืืืืขืจืื ืืช ืชืืคืขืืช ืืืืืื ืฉื ืฉืื ืืืื ืืืืฉืื. ืืื ืืงืืช ืชืื ืืช ืืชืงืืืืช ืจืืืช, ืืืื ืืฆืืจืช ืืืืงืืช ืคืจืืงืกื ืืกืคืจืืื ืืกืื ืืจืืืช ืฉื Java, ืืกืชืืืืช ืืืืื ืจืื ืขื ืืืฉืงืื.
10. ืืจืืฉื ืืจืืื
ืฉืื ืืื C++ ืืฉืคืืช ืืืจืืช, Java ืืื ื ืชืืืืช ืืืจืืฉื ืืจืืื: ื-Java, ืืื ืืืืงื ืืืื ืืืืืช ืจืง ืืืจื ืืฉืืจ ืืื (ืขื ืืืืืงื
Object
ืืจืืฉ ืืืืจืจืืื). ืขื ืืืช, ืืืืงื ืืืืื ืืืืฉื ืืกืคืจ ืืืฉืงืื, ืืืคืืื ืขืจืืืช ืืืฉืง ืืื ืืืจื ืืืืืื ืืืฉืื (ืื ืืืืืช) ืืจืืฉื ืืจืืื ื-Java.
package com.javacodegeeks.advanced.design;
public class MultipleInterfaces implements Runnable, AutoCloseable {
@Override
public void run() {
}
@Override
public void close() throws Exception {
}
}
ืืืืขืช ืืืฉืงืื ืืจืืืื ืืื ืืืขืฉื ืืืงื ืืืื, ืื ืืขืชืื ืงืจืืืืช ืืฆืืจื ืืืฉืชืืฉ ืืืืืขื ืฉืื ืืฉืื ืืืืื ืืืืจืจืืืืช ืืืืงืืช ืขืืืงื ืืืจื ืืืชืืืจ ืขื ืืืกืจ ืืชืืืื ืฉื Java ืืืจืืฉื ืืจืืื.
public class A implements Runnable {
@Override
public void run() {
}
}
public class B extends A implements AutoCloseable {
@Override
public void close() throws Exception {
}
}
public class C extends B implements Readable {
@Override
public int read(java.nio.CharBuffer cb) throws IOException {
}
}
ืืื ืืืื... ืืืืืืจื ืืืืจืื ื ืฉื Java 8 ืืืคืืช ืืืืืช ืื ืืืขืื ืขื ืืืจืงืช ืฉืืืืช ืืจืืจืช ืืืื. ืืืื ืฉืืืืช ืืจืืจืช ืืืืื, ืืืฉืงืื ืืกืคืงืื ืืืขืฉื ืื ืจืง ืืืื, ืืื ืื ืืืฉืื. ืืื, ืืืืงืืช ืฉืืืืฉืืืช ืืืฉืงืื ืืื ืืืจืฉื ืืืืืืืืช ืื ืืช ืืฉืืืืช ืืืืืฉืืืช ืืืื. ืืืืืื:
package com.javacodegeeks.advanced.design;
public interface DefaultMethods extends Runnable, AutoCloseable {
@Override
default void run() {
}
@Override
default void close() throws Exception {
}
}
public class C implements DefaultMethods, Readable {
@Override
public int read(java.nio.CharBuffer cb) throws IOException {
}
}
ืืืืจ ืื ืืจืืฉื ืืจืืื ืืื ืืื ืจื ืขืืฆืื, ืื ืืื ืขื ืืืช ืืกืืื. ืืขืืืช ืืืืืื ืืืืืช ืืืืืขื ืืฆืืืืช ืืขืชืื ืงืจืืืืช ืืคืื ืืจืืื ืืืืฉืื ืฉื ืืจืืฉื ืืจืืื, ืื ืฉืืืืฅ ืืคืชืืื ืืชืื ื ืืืจืจืืืืช ืืืืงืืช ืืืืืจืืช ืจืื. ืืจืืข ืืืื, ืืืฉืงื Java 8 ืขื ืฉืืืืช ืืจืืจืช ืืืื ื ืืคืืื ืื ืื ืงืืจืื ืืคืืืื ืืื.
interface A {
default void performAction() {
}
}
interface B extends A {
@Override
default void performAction() {
}
}
interface C extends A {
@Override
default void performAction() {
}
}
ืืืืืื, ืงืืข ืืงืื ืืื ืื ืืฆืืื ืืืืจ:
interface E extends B, C {
}
ืืฉืื ืื, ืื ืืืื ืืืืจ ืฉ-Java ืืฉืคื ืชืืื ื ืืกืชื ืืืืื ืข ืืืงืจื ืืคืื ื ืฉื ืชืื ืืช ืืื ืื ืขืฆืืื, ืืื ืืื ืฉืืฉืคื ืืชืคืชืืช, ืืืง ืืืืงืจืื ืืืื ืคืชืืื ืืชืืืื ืืืืคืืข.
11. ืืจืืฉื ืืืจืื
ืืืจืื ืืืื, ืืจืืฉื ืืื ืื ืืืจื ืืืืืื ืืขืฆื ืืช ืืืืชื ืฉืื. ืืืืคื ื ืืกืคืช ืฉืืคืชืืื ืจืืื ืืืืื ืื ืฉืืื ืืจืื ืืืชืจ ืืืื ืืืืจืืฉื ืืื ืืืจืื. ืืจืขืืื ืืื ืืืื ืคืฉืื: ืืืงืื ืืืฆืืจ ืืืจืจืืื ืฉื ืืืืงืืช, ืื ืฆืจืืืื ืืืืืช ืืืจืืืื ืืืืืงืืช ืืืจืืช. ืืืื ื ืกืชืื ืขื ืืืืืื ืืื:
interface E extends B, C {
}
ืืืืืงื
Vehicle
ืืืจืืืช ืืื ืืข ืืืืืืื (ืืชืืกืคืช ืืืงืื ืจืืื ืืืจืื ืฉื ืืชืจื ืืฆื ืืฉื ืืคืฉืืืช). ืขื ืืืช, ื ืืชื ืืืืจ ืื ืืืืงื
Vehicle
ืืื ืื ืื ืืข, ืื ืฉื ืืชื ืืขืฆื ืืืชื ืืืืฆืขืืช ืืจืืฉื.
public class Vehicle extends Engine {
private Wheels[] wheels;
}
ืืืื ืคืชืจืื ืขืืฆืืื ืืืื ื ืืื? ืื ืืืืช ืืืืื ืืืืืืืช ืืืืขืืช ืืขืงืจืื ืืช IS-A (is) ื-HAS-A (ืืืื). IS-A ืืื ืงืฉืจ ืืจืืฉื: ืชืช-ืืืืงื ืขืืืืช ืื ืืืคืจื ืืืืืงื ืฉื ืืืืงืช ืืื ืืืจืืืฆืื ืฉื ืืืืงืช ืืื. subclass) ืืจืืืื ืืช ืืื ืฉืื. ืื ืืชื ืจืืฆื ืืืขืช ืื ืืฉืืช ืืืช ืืจืืืื ืืืจืช, ืืฆืข ืืืืงืช ืืชืืื - IS -A (ืืื).") ืืื, HAS-A ืืื ืงืฉืจ ืงืืืคืืืืฆืื: ืืืืงื ืืืืืงื (ืื ืืืืื) ืืืืืืงื ืฉืืจืื ืืืงืจืื, ืขืงืจืื HAS-A ืขืืื ืืื ืืืชืจ ื-IS-A ืืืกืคืจ ืกืืืืช:
- ืืขืืฆืื ืืืืฉ ืืืชืจ;
- ืืืืื ืืฆืื ืืืชืจ ืืืืืื ืฉืฉืื ืื ืืื ื ืืชืคืฉื ืืืืจืจืืืืช ืืืขืืืืช;
- ืืืืงื ืืืจืืื ืืืืืจืื ืืืืคื ืจืืคืฃ ืืขืืืช ืงืืืคืืืืฆืื, ืฉืืืืจืช ืืืืคื ืืืืง ืืื ืืืจื ืืชืช ืืืืืงื ืฉืื.
- ืืกืืื ืืืืฉืื ืืืืืื ื ืืืืชื ืืื ืคืฉืื ืืืชืจ, ืฉืื ืื ืืชืืืช ืฉืื ืืืืืืช ืื, ืืืงืื ืืื.
ืืื ืงืฉืจ, ืืืจืืฉื ืืฉ ืืช ืืืงืื ืฉืื ืืคืืชืจืช ืืกืคืจ ืืขืืืช ืขืืฆืื ืงืืืืืช ืืืืืื ืืจืืื, ืื ืฉืืื ืืืื ืื ืืืชื. ืื ื ืืืืจ ืืช ืฉืชื ืืืืืคืืช ืืืื ืืขืช ืชืื ืื ืืืืื ืืื ืื ืืขืฆืืื ืฉืื.
12. ืื ืงืคืกืืืฆืื.
ืืจืขืืื ืฉื ืื ืงืคืกืืืฆืื ืืชืื ืืช ืืื ืื ืขืฆืืื ืืื ืืืกืชืืจ ืืช ืื ืคืจืื ืืืืฉืื (ืืื ืืฆื ืืคืขืื, ืฉืืืืช ืคื ืืืืืช ืืื') ืืืขืืื ืืืืฆืื. ืืืชืจืื ืืช ืฉื ืื ืงืคืกืืืฆืื ืื ืชืืืืงื ืืงืืืช ืืฉืื ืื. ืืืืฉืื ืืคื ืืื ืฉื ืืืืชื ื ืกืชืจ, ืืขืืืื ืขื ื ืชืื ื ืืืืชื ืืชืจืืฉืช ืื ืืจืง ืืืืฆืขืืช ืฉืืืืช ืฆืืืืจืืืช ืฉื ืืืืชื (ืืขืื ืืืืชืืช ืื ืืชื ืืคืชื ืกืคืจืืื ืื ืืกืืจืช ืืืฉืืฉืช ืื ืฉืื ืจืืื). Encapsulation ื-Java ืืืฉืืช ืืืืฆืขืืช ืืืื ื ืจืืืช ืื ืืืฉืืช. ื-Java, ืื ื ืืฉื ืืฉืืืืช ืขืืืื ืืืืืฆืืช ืืขืืื ืื ืืืฉืืฃ ืฉืืืช ืืฉืืจืืช, ืจืง ืืจื ืืืคืจืื ื-seters (ืืื ืื ืื ืืฉืืืช ืืกืืื ืื ืืกืืคืืื). ืืืืืื:
package com.javacodegeeks.advanced.design;
public class Encapsulation {
private final String email;
private String address;
public Encapsulation( final String email ) {
this.email = email;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
public String getEmail() {
return email;
}
}
ืืืืื ืื ืืืืืจื ืืช ืื ืฉื ืงืจื
JavaBeans ืืฉืคืช Java: ืืืืงืืช Java ืกืื ืืจืืืืช ื ืืชืืืช ืขื ืคื ืกื ืฉื ืืืกืืืืช, ืฉืืืช ืืื ืืืคืฉืจืช ืืืฉื ืืฉืืืช ืจืง ืืืืฆืขืืช ืฉืืืืช getter ื-seter. ืืคื ืฉืืืจ ืืืืฉื ื ืืกืขืืฃ ืืืจืืฉื, ืื ื ืืงืคืืื ืชืืื ืขื ืืืื ืืคืจืกืื ืืืื ืืืื ืืืืชื, ืชืื ืฉืืืืฉ ืืขืงืจืื ืืช ืืื ืงืคืกืืืฆืื. ืื ืื ืฉืื ืฆืจืื ืืืืืช ืฆืืืืจื ืฆืจืื ืืืืืช ืคืจืื (ืื ืืืื/ืืืืื ืคืจืื, ืชืืื ืืืขืื ืฉืืชื ืคืืชืจ). ืื ืืฉืชืื ืืืืื ืืืจืื ืืื ืฉืืืชื ืื ืืืคืฉ ืืขืฆื ืืืื ืืืฆืข ืฉืื ืืืื ืฉืืืจืื (ืื ืืคืืืช ืืืืขืจ ืืืชื).
13. ืฉืืขืืจืื ืืฉืืืืช ืกืืคืืืช
ื-Java, ืืฉ ืืจื ืืื ืืข ืืืืืงื ืืืคืื ืืชืช-ืืืืงื ืฉื ืืืืงื ืืืจืช: ืืฉ ืืืืจืื ืขื ืืืืืงื ืืืืจืช ืืกืืคืืช.
package com.javacodegeeks.advanced.design;
public final class FinalClass {
}
ืืืชื ืืืืช ืืคืชื
ืกืืคืืช ืืืฆืืจืช ืืชืืื ืืื ืขืช ืืืขืืืืช ืืฉื ื ืืขืงืืฃ ืืช ืืฉืืื.
package com.javacodegeeks.advanced.design;
public class FinalMethod {
public final void performAction() {
}
}
ืืื ืืืืื ืืืืืื ืืืืืื ืื ืืืืงื ืื ืฉืืืืช ืฆืจืืืืช ืืืืืช ืกืืคืืืช ืื ืื. ืืืืงืืช ืืฉืืืืช ืกืืคืืืช ืืืืืืืช ืืช ืืืจืืื ืืงืฉื ืืืื ืืืฉืื ืืจืืฉ ืืื ืืืืงื ืฆืจืืื ืื ืื ืืขืืืจ ืืืจืืฉื, ืื ืืื ืืฉ ืื ืื ืฆืจืื ืืขืงืืฃ ืฉืืื ืืขืชืื. ืื ืืฉืื ืืืืืื ืขืืืจ ืืคืชืื ืกืคืจืืืช, ืืืืืื ืฉืืืืืืช ืขืืฆืื ืืื ืื ืขืืืืืช ืืืืืื ืืืืคื ืืฉืืขืืชื ืืช ืืืฉืืืืช ืฉื ืืกืคืจืืื. ืืกืคืจืืื ืืกืื ืืจืืืช ืฉื ื'ืืืื ืืฉ ืืื ืืืืืืืช ืืฉืืขืืจืื ืืืจืื ืื, ืืืคืืจืกืืช ืืืืชืจ ืืื ืืืืงืช ื-String. ืืฉืื ืืืงืื, ืืืืื ืื ืืชืงืืื ืืื ืืื ืืข ืื ื ืืกืืื ืืช ืฉื ืืคืชืืื ืืืืฆืื ืคืชืจืื ืืฉืืื, "ืืื ืืืชืจ" ืืืืฉืื ืืืจืืืช.
14. ืื ืืืื
ืืืืง ืื ืฉื ืืฉืืขืืจ, ืืืกืื ื ืืช ืืืืฉืืื ืฉื ืชืื ืืช ืืื ืื ืขืฆืืื ื-Java. ืืกืชืืื ื ืื ืขื ืชืื ืืช ืืืืื, ื ืืขื ื ืืืื ืืืฉืืื ืคืื ืงืฆืืื ืืืื ืืจืืื ื ืืื ืืฉืคื ืืชืคืชืื ืขื ืืืื. ืืืืง ืืื ืฉื ืืฉืืขืืจ, ื ืคืืืฉ ืชืจืืคืืช ืื ืจืืืช ืืืืฆื ืื ืืฉื ืืช ืืช ืืืจื ืื ืื ื ื ืืืฉืื ืืืืืืืช ืกืืืื ืืชืื ืืช.
15. ืืืจื ืืช ืงืื ืืืงืืจ
ืืชื ืืืื ืืืืจืื ืืช ืืืงืืจ ืืื -
advanced-java-part-3 ืืงืืจ:
ืืืฆื ืืขืฆื ืฉืืขืืจืื an
GO TO FULL VERSION