5.3 オーバーライドで「上書き」する
オーバーライドで「上書き」する オーバーライド 前ページでは、サブクラスでフィールド・メソッドを追加できることを説明しました。 では、追加したのが同じ名前の場合、どうなるでしょう。 オーバーライドの例(...
5.4 オーバーライドされたメソッドを呼び出すと?
オーバーライドされたメソッドを呼び出すと? このページで説明する内容は、実は非常に重要な内容です。 結構さらっと説明していますが、ここで説明したことを後で出てくる重要な項目に使うので、しっかり覚えておいてく...
5.5 スーパーからサブは見えません
... メソッドを追加しています。 */ class NonOverrideSub extends UseSubClassSuper { /** * 自クラスの名前を出力するメソッドです。 * オーバーライドしていません。 */ void printMyName() { System.out.println( "NonOverrideSub" ); } } このプログラムは、前ページ...
6.1 オーバーライドするとメソッドはなくなる?
オーバーライドするとメソッドはなくなる? この章では、継承についてわかりにくい部分、謎な箇所について説明していきます。 スーパークラスからサブクラスは? 質問:オーバーライドすると、スーパークラスにある...
6.2 3段以上オーバーライドしたら?
3段以上オーバーライドしたら? オーバーライドを重ねると? 質問:継承を3段以上行ってそれぞれでスーパークラスのメソッドをオーバーライドした場合、どのメソッドが呼ばれますか? たとえばクラスAのサブクラスBがあり、...
7.3 オーバーライドされたメソッドを呼び出すと?再び
オーバーライドされたメソッドを呼び出すと?再び オーバーライドされたメソッドを呼び出す 前ページでは、アップキャストをすることで「使えるフィールド・メソッドがスーパークラスのものに限られる」ということを説明...
7.4 ポリモーフィズム!
ポリモーフィズム! 「ポリモーフィズム」しよう! 前ページで説明したように、スーパークラスの参照を通してメソッドを呼び出しても、そのメソッドがオーバーライドされていたら、オーバーライドしたメソッドが呼び出されます。 この機能を使うと「ポリモーフィズム」という面白い機能を使うことができます。 まずは具体例を見てみましょう。 ポリモーフィズムの例(Po...
9.1 abstractクラスとabstractメソッド
...、実際にはあまり使わない機能です。 ただ、その次の章で説明する「インタフェース」を理解するうえでの手助けになるので、とりあえずかじっておきましょう。 抽象クラスを作ってみる ここまでの説明で、オーバーライドとアップキャストを使うことでポリモーフィズムができることはわかったと思います。 この「ポリモーフィズム」を強制させる機能があります。 それがこれから説明する「抽象クラス」というものです。 まずは...
9.2 抽象クラスの使い道
抽象クラスの使い道 抽象クラスは、一見するとどんな使い道があるかわかりにくいクラスです。 そこで、一番手っ取り早いメリット「オーバーライドしなきゃいけない!」という点を見てみましょう。 抽象クラスでミスを防ごう 抽象クラスのメリットを見るために、抽象クラスを使用しなかった場合の失敗例を見てみましょう。 抽象クラスを使用しない例(...
9.4 「抽象」って何?
...ていました。 「theoretical」は「理論上」という意味です。 ここで、「9.1 abstractクラスとabstractメソッド」の、抽象クラスの使用例を思い返してみましょう。 オーバーライドしたメソッドを呼び出している箇所(再掲) // オーバーライドしたメソッドを呼び出します。 refSuper.printMyName(); // 実行結果: // ConcreteSu...
10.1 インタフェースという「抽象クラスっぽいもの」
...* * PrintInterfaceインタフェースの実装クラス。 */ class Implemented implements PrintInterface { /** * 抽象メソッドをオーバーライドします。 */ public void printMyName() { System.out.println( "Implemented" ); } } /** * 実行用クラス。こ...
10.2 インタフェースはクラスと一緒に「継承」できる!
...dクラスのサブクラス。 */ class ImplementedAndSub extends AddSuper implements CalcInterface { /** * 抽象メソッドをオーバーライドします。 */ public int calc( int lh, int rh ) { // スーパークラスが持つadd()メソッドを使います。 return add( lh, rh ...
10.4 インタフェースは「抽象クラスの強力版」?
...ールドのみです。 (3):抽象クラスはクラス・抽象メソッドの前にabstractを付けなければいけませんが、インタフェースは付けません。 (4):インタフェースは「継承」を「実装」と呼びます。また、「オーバーライド」を「実装」と呼びます。 (5):抽象クラスの「extends」はインタフェースでは「implements」を使用します。 (6):インタフェースの抽象メソッドは自動的に「public」が付くので、実...
11.4 オブジェクト指向分析設計
...た方がいいでしょう。 このコンテンツで紹介してきたJavaの機能は「オブジェクト指向プログラミング」です。 クラスからインスタンスを作り、インスタンスはフィールドとメソッドを持ち、継承して拡張し、オーバーライドしてひも付けし、アップキャストでポリモーフィズムし、インタフェースで実装と分ける――こういった機能を皆さんはもう使いこなせるはずです。 それと「オブジェクトは車とかタクシーを表したもの」という考え方...
11.5 オブジェクト指向の問題点
...ルドへアクセスするためにGetter・Setterメソッドか、それに代わるメソッドを作る必要があります。 継承を使うと、継承した分だけクラスが増え、合わせてインタフェースも増えます。 サブクラスでオーバーライドをすれば、それだけメソッドも増えます。 クラスが増えていくと、テストをするためのプログラムもどんどん増えます。 テストをする際には、ダミーのクラスも作らなければいけません。 と、こんな感...