Javaでオブジェクト指向の考え方の重要な考え方であるポリモフィズムについて。
Contents
ポリモフィズムとは?
日常的に使っていながらいざ説明するとなると困りました。
無理やり定義しようとしてみたのですが、
2つ以上のインスタンスが共通な親のクラス(またはインターフェイス)を型にもち、同一のメソッドを使用していながら、振る舞い自体は違うこと。
ですかね。無理やり書きましたが、初心者でこれ読んでわかる人はいないでしょう(汗)
以下コードでこれがポリモフィズムだ!というものを説明しますね。
ソース
下記がポリモフィズムを実装した例となります。
Sample.class
1 2 3 4 5 6 7 8 9 |
public class Sample { public static void main(String[] args) { SuperClass s1 = new SubClass1(); SuperClass s2 = new SubClass2(); s1.disp();//SubClass1 s2.disp();//SubClass2 } } |
SuperClass.java
1 2 3 |
public abstract class SuperClass { protected abstract void disp(); } |
SubClass1.java
1 2 3 4 5 6 |
public class SubClass1 extends SuperClass{ @Override public void disp() { System.out.println("SubClass1"); } } |
SubClass2.java
1 2 3 4 5 6 |
public class SubClass2 extends SuperClass{ @Override public void disp() { System.out.println("SubClass2"); } } |
逆にstaticを使うとポリモフィズムは適用できません。
Sample.class
1 2 3 4 5 6 7 8 9 10 11 |
public class Sample { public static void main(String[] args) { SuperClass s1 = new SubClass1(); SuperClass s2 = new SubClass2(); s1.disp();//SuperClass s2.disp();//SuperClass SubClass1 sub1 = new SubClass1(); sub1.disp();//SubClass1 } } |
SuperClass.java
1 2 3 4 5 |
public class SuperClass { public static void disp(){ System.out.println("SuperClass"); } } |
SubClass1.java
1 2 3 4 5 |
public class SubClass1 extends SuperClass{ public static void disp() { System.out.println("SubClass1"); } } |
SubClass2.java
1 2 3 4 5 |
public class SubClass2 extends SuperClass{ public static void disp() { System.out.println("SubClass2"); } } |