カプセル化と継承
- クラス間の関係を定義する用語の違いを覚えておいてください。 IS-Aは、あるクラスが別のクラスを継承する(拡張する)か、インターフェイスを実装する(実装する)場合です。 HAS-Aは、あるクラスで別のクラスのオブジェクトへの参照が使用される場合に言われます。
- カプセル化の原則に基づいて記述されたコードには、メソッド(setVarNameおよびgetVarName)を介してアクセスされるプライベート変数が含まれています。
- 継承は、ポリモーフィズム、型キャスト、メソッドのオーバーロードおよびオーバーライドの背後にある基本概念です。
- Javaでは、すべてのクラスはObjectの子孫です。
多型
- 参照変数のタイプを変更できません。 ただし、変数はそのクラスの子孫のオブジェクトを参照できます。 つまり、異なるタイプの変数は1つのオブジェクトを参照できます。 主なものは、これらすべての型がオブジェクトクラスのスーパークラスであることです。 したがって、Object型の変数は、任意の型のオブジェクトを参照できます。
List<Integer> list; list = new ArrayList<Integer>(); //ArrayList LinkedList List, list = new LinkedList<Integer>(); list = new String(); //
- 参照変数のタイプのみが、どのオブジェクトメソッドを呼び出すことができるかを決定します。 つまり、特定のクラスに固有のメソッドを使用する場合、スーパークラス型の変数からそれらを呼び出すことはできません。
public class Fruit { public void eat(){ System.out.println("NomNomNom"); } } class Apple extends Fruit{ public void grow(){ System.out.println("I'm growing"); } public static void main(String[] args) throws InterruptedException { Fruit fruit; fruit = new Apple(); fruit.eat(); // eat , fruit.grow(); //! grow Apple, Fruit } }
- 多態性はオブジェクトメソッドでのみ機能しますが、静的メソッドでは機能しません。
オーバーロードとオーバーライド
- メソッドはオーバーロードおよびオーバーライドできます。 コンストラクターはオーバーロードされています。
- メソッドをオーバーライドする場合
- 引数の変更されていないリストが必要です。
- 不変の戻り値型が必要です。
- アクセスレベルは、継承されたメソッドより低くすることはできません。
- 新しい例外をスローすべきではありません。
- 継承されたメソッドのみを再定義できます。
- 次のように再定義可能なメソッドにアクセスできます。
public class Fruit { public void eat(){ System.out.println("NomNomNom"); } } class Apple extends Fruit{ public void grow(){ System.out.println("I'm growing"); } public void eat(){ System.out.println("NomAppleNom"); } public void test(){ eat();// super.eat();// } }
- オーバーロードされたメソッドの場合
- 新しい引数リストが必要です。
- 新しい戻り値の型があります。
- 彼らは制限なしに新しいレベルのアクセスを持つことができます。
- 新しい例外をスローする場合があります
- スーパークラスメソッドは、子孫でオーバーロードできます。
- 多態性はオーバーライドにのみ適用され、リロードには適用されません。
戻り型
- nullおよび配列を戻り値として使用できます。
- 戻り値の型がプリミティブ(byte、int、floatなど)である場合、javaは可能であれば暗黙的な型変換を実行します。
public class Fruit { public int eat(){ byte b = 127; return b; // byte b int. } public int grow(){ long l = 42; return l; //! int 42 , // return (int) l; } }
- voidメソッドの場合、メソッドを中止する場合はreturnキーワードを使用できます。
- メソッドがオブジェクトを返す場合、このオブジェクトのクラスの子孫を戻り値として使用できます。
コンストラクター
- 各クラスは、オブジェクトを作成するときに、最初にコンストラクターを呼び出します。 各コンストラクターで、コンパイラーは、パラメーターなしでスーパークラスのコンストラクターへの呼び出しを自動的に挿入します。 したがって、オブジェクトのコンストラクターは常に最初に実行され、次にオブジェクトの最初の子孫のコンストラクターなどが実行されます。
- コンストラクターには、クラスと同じ名前、アクセスレベルがありますが、戻り値はありません。
- コンストラクターを作成しない場合、コンパイラーがコンストラクターを作成します。 生成されたコンストラクターには受け入れられる引数がなく、その本体はスーパークラスsuper();のコンストラクターの呼び出しで構成されます。
- 抽象クラスにはコンストラクターがありますが、インターフェースにはありません。
- スーパークラスに引数のないコンストラクターがない場合は、クラスのコンストラクターでsuper()呼び出しを明示的に宣言する必要があります。 必要な変数を渡します。
- コンストラクターは決して継承されませんが、オーバーロードすることができます
- コンストラクターは、this()を使用して他のコンストラクターからのみ直接呼び出すことができます。 およびスーパー();。
- 例:
public class Fruit { public Fruit(String str){ System.out.println("Fruit constructor"); } } class Apple extends Fruit{ public Apple(){ super("apple"); System.out.println("Apple's constructor"); } } public class GreenApple extends Apple{ public GreenApple(){ System.out.println("GreenApple's constructor"); }; : Fruit constructor Apple's constructor GreenApple's constructor }
静的メソッドと変数
- 動作がオブジェクトの状態に依存しない場合は、静的メソッドを使用します。
- 静的メソッドは、静的変数にのみアクセスできます。
- 静的メンバーはオブジェクトではなく、クラスに関連付けられています。
- 静的メソッドはオーバーライドできません。
参照:
SCJP Sun認定プログラマーfor Java 6試験310-065