JavaRush /ื‘ืœื•ื’ Java /Random-HE /ืขื™ืฆื•ื‘ ืฉื™ืขื•ืจื™ื ื•ืžืžืฉืงื™ื (ืชืจื’ื•ื ื”ืžืืžืจ)
fatesha
ืจึธืžึธื”

ืขื™ืฆื•ื‘ ืฉื™ืขื•ืจื™ื ื•ืžืžืฉืงื™ื (ืชืจื’ื•ื ื”ืžืืžืจ)

ืคื•ืจืกื ื‘ืงื‘ื•ืฆื”
ืขื™ืฆื•ื‘ ื›ื™ืชื•ืช ื•ืžืžืฉืงื™ื (ืชืจื’ื•ื ื”ืžืืžืจ) - 1

ืชื•ึนื›ึถืŸ

  1. ืžื‘ื•ื
  2. ืžืžืฉืงื™ื
  3. ืกืžื ื™ ืžืžืฉืง
  4. ืžืžืฉืงื™ื ืคื•ื ืงืฆื™ื•ื ืœื™ื™ื, ืฉื™ื˜ื•ืช ืกื˜ื˜ื™ื•ืช ื•ืฉื™ื˜ื•ืช ื‘ืจื™ืจืช ืžื—ื“ืœ
  5. ืฉื™ืขื•ืจื™ื ืžื•ืคืฉื˜ื™ื
  6. ืฉื™ืขื•ืจื™ื ื‘ืœืชื™ ื ื™ืชื ื™ื ืœืฉื™ื ื•ื™ (ืงื‘ื•ืข).
  7. ืฉื™ืขื•ืจื™ื ืื ื•ื ื™ืžื™ื™ื
  8. ืจึฐืื•ึผืช
  9. ื™ึฐืจื•ึผืฉืึธื”
  10. ื™ืจื•ืฉื” ืžืจื•ื‘ื”
  11. ื™ืจื•ืฉื” ื•ื”ืจื›ื‘
  12. ื›ื™ืžื•ืก
  13. ืฉื™ืขื•ืจื™ื ื•ืฉื™ื˜ื•ืช ืื—ืจื•ื ื•ืช
  14. ืžื” ื”ืœืื”
  15. ื”ื•ืจื“ ืืช ืงื•ื“ ื”ืžืงื•ืจ

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() {
        // Implementation here
    }
}
ื‘ื”ื™ื•ืชื• ื‘ืจืžืช ื”ืžื•ืคืข, ื ื™ืชืŸ ืœืขืงื•ืฃ ืืช ืฉื™ื˜ื•ืช ื‘ืจื™ืจืช ื”ืžื—ื“ืœ ืขืœ ื™ื“ื™ ื›ืœ ืžื™ืžื•ืฉ ืžืžืฉืง, ืืš ื›ืขืช ืžืžืฉืงื™ื ื™ื›ื•ืœื™ื ืœื›ืœื•ืœ ื’ื ืฉื™ื˜ื•ืช ืกื˜ื˜ื™ื•ืช , ืœื“ื•ื’ืžื”: ื—ื‘ื™ืœื” com.javacodegeeks.advanced.design;
public interface InterfaceWithDefaultMethods {
    static void createAction() {
        // Implementation here
    }
}
ื ื™ืชืŸ ืœื•ืžืจ ืฉืžืชืŸ ื”ื™ื™ืฉื•ื ื‘ืžืžืฉืง ืžื‘ื™ืก ืืช ื›ืœ ื”ืžื˜ืจื” ืฉืœ ืชื›ื ื•ืช ื—ื•ื–ื™ื. ืื‘ืœ ื™ืฉื ืŸ ืกื™ื‘ื•ืช ืจื‘ื•ืช ืœื›ืš ืฉื”ืชื›ื•ื ื•ืช ื”ืœืœื• ื”ื•ื›ื ืกื• ืœืฉืคืช ื’'ืื•ื•ื” ื•ืœื ืžืฉื ื” ื›ืžื” ื”ืŸ ืฉื™ืžื•ืฉื™ื•ืช ืื• ืžื‘ืœื‘ืœื•ืช, ื”ืŸ ืฉื ื‘ืฉื‘ื™ืœืš ื•ืขื‘ื•ืจ ื”ืฉื™ืžื•ืฉ ืฉืœืš. ืžืžืฉืงื™ื ืคื•ื ืงืฆื™ื•ื ืœื™ื™ื ื”ื ืกื™ืคื•ืจ ืื—ืจ ืœื’ืžืจื™ ื•ื”ื•ื›ื—ื• ื›ืชื•ืกืคื•ืช ืฉื™ืžื•ืฉื™ื•ืช ืžืื•ื“ ืœืฉืคื”. ื‘ื™ืกื•ื“ื• ืฉืœ ื“ื‘ืจ, ืžืžืฉืง ืคื•ื ืงืฆื™ื•ื ืœื™ ื”ื•ื ืžืžืฉืง ืฉืขืœื™ื• ืžื•ืฆื”ืจืช ืจืง ืฉื™ื˜ื” ืžื•ืคืฉื˜ืช ืื—ืช. 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() {
        // Implementation here
    }

    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(
            // Example of creating anonymous class which implements
            // Runnable interface
            new Runnable() {
                @Override
                public void run() {
                    // Implementation here
                }
            }
        ).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( () -> { /* Implementation here */ } ).start();
    }
}

8. ื ืจืื•ืช

ื›ื‘ืจ ื“ื™ื‘ืจื ื• ืงืฆืช ืขืœ ื›ืœืœื™ ื”ื ืจืื•ืช ื•ื”ื ื’ื™ืฉื•ืช ื‘ื’'ืื•ื•ื” ื‘ื—ืœืง 1 ืฉืœ ื”ืžื“ืจื™ืš. ื‘ื—ืœืง ื–ื”, ืื ื—ื ื• ื”ื•ืœื›ื™ื ืœื—ื–ื•ืจ ืขืœ ื”ื ื•ืฉื ื”ื–ื” ืฉื•ื‘, ืื‘ืœ ื‘ื”ืงืฉืจ ืฉืœ ืชืช-ืกื™ื•ื•ื’. ืขื™ืฆื•ื‘ ื›ื™ืชื•ืช ื•ืžืžืฉืงื™ื (ืชืจื’ื•ื ื”ืžืืžืจ) - 2ื ืจืื•ืช ื‘ืจืžื•ืช ืฉื•ื ื•ืช ืžืืคืฉืจืช ืื• ืžื•ื ืขืช ืžืžื—ืœืงื•ืช ืœืจืื•ืช ืžื—ืœืงื•ืช ืื• ืžืžืฉืงื™ื ืื—ืจื™ื (ืœื“ื•ื’ืžื”, ืื ื”ืŸ ื ืžืฆืื•ืช ื‘ื—ื‘ื™ืœื•ืช ืฉื•ื ื•ืช ืื• ืžืงื•ื ื ื•ืช ื–ื• ื‘ื–ื•) ืื• ืžื—ืœืงื•ืช ืžืฉื ื” ืœืจืื•ืช ื•ืœื’ืฉืช ืœืฉื™ื˜ื•ืช, ื”ื‘ื ืื™ื ื•ื”ืฉื“ื•ืช ืฉืœ ื”ื•ืจื™ื”ืŸ. ื‘ืกืขื™ืฃ ื”ื‘ื, ื™ืจื•ืฉื”, ื ืจืื” ื–ืืช ื‘ืคืขื•ืœื”.

9. ื™ืจื•ืฉื”

ื™ืจื•ืฉื” ื”ื™ื ืื—ื“ ืžืžื•ืฉื’ื™ ื”ืžืคืชื— ืฉืœ ืชื›ื ื•ืช ืžื•ื ื—ื” ืขืฆืžื™ื, ื”ืžืฉืžืฉืช ื›ื‘ืกื™ืก ืœื‘ื ื™ื™ืช ืžื—ืœืงื” ืฉืœ ืžืขืจื›ื•ืช ื™ื—ืกื™ื. ื‘ืฉื™ืœื•ื‘ ืขื ื›ืœืœื™ ื ืจืื•ืช ื•ื ื’ื™ืฉื•ืช, ื”ื•ืจืฉื” ืžืืคืฉืจืช ืœืขืฆื‘ ืžื—ืœืงื•ืช ืœื”ื™ืจืจื›ื™ื” ืฉื ื™ืชืŸ ืœื”ืจื—ื™ื‘ ื•ืœืชื—ื–ืง. ื‘ืจืžื” ื”ืžื•ืฉื’ื™ืช, ืชื•ืจืฉื” ื‘-Java ืžื™ื•ืฉืžืช ื‘ืืžืฆืขื•ืช ืกื™ื•ื•ื’ ืžืฉื ื” ื•ืžื™ืœืช ื”ืžืคืชื— extends , ื™ื—ื“ ืขื ืžื—ืœืงืช ื”ืื‘. ืชืช-ืžื—ืœืงื” ื™ื•ืจืฉืช ืืช ื›ืœ ื”ืจื›ื™ื‘ื™ื ื”ืฆื™ื‘ื•ืจื™ื™ื ื•ื”ืžื•ื’ื ื™ื ืฉืœ ืžื—ืœืงืช ื”ืื‘. ื‘ื ื•ืกืฃ, ืชืช-ืžื—ืœืงื” ื™ื•ืจืฉืช ืืช ืจื›ื™ื‘ื™ ื”ื—ื‘ื™ืœื”-ืคืจื˜ื™ื™ื ืฉืœ ืžื—ืœืงืช ื”ืื‘ ืฉืœื” ืื ืฉื ื™ื”ื (ืชืช-ืžื—ืœืงื” ื•ืžื—ืœืงื”) ื ืžืฆืื™ื ื‘ืื•ืชื” ื”ื—ื‘ื™ืœื”. ืขื ื–ืืช, ื—ืฉื•ื‘ ืžืื•ื“, ืœื ืžืฉื ื” ืžื” ืืชื” ืžื ืกื” ืœืขืฆื‘, ืœื”ื™ืฆืžื“ ืœืกื˜ ื”ืžื™ื ื™ืžืœื™ ืฉืœ ืฉื™ื˜ื•ืช ืฉืžื—ืœืงื” ื—ื•ืฉืคืช ื‘ืคื•ืžื‘ื™ ืื• ืœืชืชื™ ื”ืžื—ืœืงื•ืช ืฉืœื”. ืœื“ื•ื’ืžื”, ื‘ื•ืื• ื ืกืชื›ืœ ืขืœ ื”ืžื—ืœืงื” Parentื•ืขืœ ืชืช ื”ืžื—ืœืงื” ืฉืœื” Childื›ื“ื™ ืœื”ื“ื’ื™ื ืืช ื”ื”ื‘ื“ืœ ื‘ืจืžื•ืช ื”ื ืจืื•ืช ื•ื”ื”ืฉืคืขื•ืช ืฉืœื”ืŸ.
package com.javacodegeeks.advanced.design;

public class Parent {
    // Everyone can see it
    public static final String CONSTANT = "Constant";

    // No one can access it
    private String privateField;
    // Only subclasses can access it
    protected String protectedField;

    // No one can see it
    private class PrivateClass {
    }

    // Only visible to subclasses
    protected interface ProtectedInterface {
    }

    // Everyone can call it
    public void publicAction() {
    }

    // Only subclass can call it
    protected void protectedAction() {
    }

    // No one can call it
    private void privateAction() {
    }

    // Only subclasses in the same package can call it
    void packageAction() {
    }
}
package com.javacodegeeks.advanced.design;

// Resides in the same package as parent class
public class Child extends Parent implements Parent.ProtectedInterface {
    @Override
    protected void protectedAction() {
        // Calls parent's method implementation
        super.protectedAction();
    }

    @Override
    void packageAction() {
        // Do nothing, no call to parent's method implementation
    }

    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() {
        // Some implementation here
    }

    @Override
    public void close() throws Exception {
       // Some implementation here
    }
}
ื”ื˜ืžืขืช ืžืžืฉืงื™ื ืžืจื•ื‘ื™ื ื”ื™ื ืœืžืขืฉื” ื—ื–ืงื” ืœืžื“ื™, ืืš ืœืขืชื™ื ืงืจื•ื‘ื•ืช ื”ืฆื•ืจืš ืœื”ืฉืชืžืฉ ื‘ื”ื˜ืžืขื” ืฉื•ื‘ ื•ืฉื•ื‘ ืžื•ื‘ื™ืœ ืœื”ื™ืจืจื›ื™ื™ืช ืžื—ืœืงื•ืช ืขืžื•ืงื” ื›ื“ืจืš ืœื”ืชื’ื‘ืจ ืขืœ ื—ื•ืกืจ ื”ืชืžื™ื›ื” ืฉืœ Java ื‘ื™ืจื•ืฉื” ืžืจื•ื‘ื”. 
public class A implements Runnable {
    @Override
    public void run() {
        // Some implementation here
    }
}
// Class B wants to inherit the implementation of run() method from class A.
public class B extends A implements AutoCloseable {
    @Override
    public void close() throws Exception {
       // Some implementation here
    }
}
// Class C wants to inherit the implementation of run() method from class A
// and the implementation of close() method from class B.
public class C extends B implements Readable {
    @Override
    public int read(java.nio.CharBuffer cb) throws IOException {
       // Some implementation here
    }
}
ื•ื›ืŸ ื”ืœืื”... ื”ืžื”ื“ื•ืจื” ื”ืื—ืจื•ื ื” ืฉืœ Java 8 ืžื˜ืคืœืช ื‘ืžื™ื“ืช ืžื” ื‘ื‘ืขื™ื” ืขื ื”ื–ืจืงืช ืฉื™ื˜ื•ืช ื‘ืจื™ืจืช ืžื—ื“ืœ. ื‘ื’ืœืœ ืฉื™ื˜ื•ืช ื‘ืจื™ืจืช ื”ืžื—ื“ืœ, ืžืžืฉืงื™ื ืžืกืคืงื™ื ืœืžืขืฉื” ืœื ืจืง ื—ื•ื–ื”, ืืœื ื’ื ื™ื™ืฉื•ื. ืœื›ืŸ, ืžื—ืœืงื•ืช ืฉืžื™ื™ืฉืžื•ืช ืžืžืฉืงื™ื ืืœื• ื™ื™ืจืฉื• ืื•ื˜ื•ืžื˜ื™ืช ื’ื ืืช ื”ืฉื™ื˜ื•ืช ื”ืžื™ื•ืฉืžื•ืช ื”ืœืœื•. ืœื“ื•ื’ืžื”:
package com.javacodegeeks.advanced.design;

public interface DefaultMethods extends Runnable, AutoCloseable {
    @Override
    default void run() {
        // Some implementation here
    }

    @Override
    default void close() throws Exception {
       // Some implementation here
    }
}

// Class C inherits the implementation of run() and close() methods from the
// DefaultMethods interface.
public class C implements DefaultMethods, Readable {
    @Override
    public int read(java.nio.CharBuffer cb) throws IOException {
       // Some implementation here
    }
}
ื–ื›ื•ืจ ื›ื™ ื™ืจื•ืฉื” ืžืจื•ื‘ื” ื”ื™ื ื›ืœื™ ืจื‘ ืขื•ืฆืžื”, ืืš ื™ื—ื“ ืขื ื–ืืช ืžืกื•ื›ืŸ. ื‘ืขื™ื™ืช ื”ื™ื”ืœื•ื ื”ืžื•ื•ืช ื”ื™ื“ื•ืขื” ืžืฆื•ื˜ื˜ืช ืœืขืชื™ื ืงืจื•ื‘ื•ืช ื›ืคื’ื ืžืจื›ื–ื™ ื‘ื™ื™ืฉื•ื ืฉืœ ื™ืจื•ืฉื” ืžืจื•ื‘ื”, ืžื” ืฉืžืืœืฅ ืžืคืชื—ื™ื ืœืชื›ื ืŸ ื”ื™ืจืจื›ื™ื•ืช ืžื—ืœืงื•ืช ื‘ื–ื”ื™ืจื•ืช ืจื‘ื”. ืœืจื•ืข ื”ืžื–ืœ, ืžืžืฉืงื™ Java 8 ืขื ืฉื™ื˜ื•ืช ื‘ืจื™ืจืช ืžื—ื“ืœ ื ื•ืคืœื™ื ื’ื ื”ื ืงื•ืจื‘ืŸ ืœืคื’ืžื™ื ืืœื•.
interface A {
    default void performAction() {
    }
}

interface B extends A {
    @Override
    default void performAction() {
    }
}

interface C extends A {
    @Override
    default void performAction() {
    }
}
ืœื“ื•ื’ืžื”, ืงื˜ืข ื”ืงื•ื“ ื”ื‘ื ืœื ื™ืฆืœื™ื— ืœื”ื“ืจ:
// E is not compilable unless it overrides performAction() as well
interface E extends B, C {
}
ื‘ืฉืœื‘ ื–ื”, ื–ื” ื”ื•ื’ืŸ ืœื•ืžืจ ืฉ-Java ื›ืฉืคื” ืชืžื™ื“ ื ื™ืกืชื” ืœื”ื™ืžื ืข ืžืžืงืจื™ ื”ืคื™ื ื” ืฉืœ ืชื›ื ื•ืช ืžื•ื ื—ื” ืขืฆืžื™ื, ืื‘ืœ ื›ื›ืœ ืฉื”ืฉืคื” ืžืชืคืชื—ืช, ื—ืœืง ืžื”ืžืงืจื™ื ื”ืืœื” ืคืชืื•ื ื”ืชื—ื™ืœื• ืœื”ื•ืคื™ืข. 

11. ื™ืจื•ืฉื” ื•ื”ืจื›ื‘

ืœืžืจื‘ื” ื”ืžื–ืœ, ื™ืจื•ืฉื” ื”ื™ื ืœื ื”ื“ืจืš ื”ื™ื—ื™ื“ื” ืœืขืฆื‘ ืืช ื”ื›ื™ืชื” ืฉืœืš. ื—ืœื•ืคื” ื ื•ืกืคืช ืฉืžืคืชื—ื™ื ืจื‘ื™ื ืžืืžื™ื ื™ื ืฉื”ื™ื ื”ืจื‘ื” ื™ื•ืชืจ ื˜ื•ื‘ื” ืžื”ื™ืจื•ืฉื” ื”ื™ื ื”ื”ืจื›ื‘. ื”ืจืขื™ื•ืŸ ื”ื•ื ืžืื•ื“ ืคืฉื•ื˜: ื‘ืžืงื•ื ืœื™ืฆื•ืจ ื”ื™ืจืจื›ื™ื” ืฉืœ ืžื—ืœืงื•ืช, ื”ื ืฆืจื™ื›ื™ื ืœื”ื™ื•ืช ืžื•ืจื›ื‘ื™ื ืžืžื—ืœืงื•ืช ืื—ืจื•ืช. ื‘ื•ืื• ื ืกืชื›ืœ ืขืœ ื”ื“ื•ื’ืžื” ื”ื–ื•:
// E is not compilable unless it overrides performAction() as well
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
ื”ืขืจื•ืช
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION