多態性(ポリモーフィズム)
class musician{ void play(){System.out.println("play music");}; } class Pianist extends musician{ public void play(){ System.out.println("play piano");} } class Trumpeter extends musician{ public void play(){ System.out.println("play trumpet");} } class Concert{ Concert(){ Pianist p1=new Pianist(); Trumpeter t1=new Trumpeter(); musician m1; m1=p1; m1.play(); m1=t1; m1.play(); } } class Poly{ public static void main(String[] args){ Concert ct=new Concert(); } }これを実行すると、
abstract class musician{ abstract void play(); } class Pianist extends musician{ public void play(){ System.out.println("play piano");} } class Trumpeter extends musician{ public void play(){ System.out.println("play trumpet");} } class Concert{ Concert(){ Pianist p1=new Pianist(); Trumpeter t1=new Trumpeter(); musician m1; m1=p1; m1.play(); m1=t1; m1.play(); } } class Poly{ public static void main(String[] args){ Concert ct=new Concert(); } }実行結果は同じですが、musicianのサブクラスを作成しplay()の定義を忘れた場合、コンパイルでエラーが出ます。
interface musician{ abstract void play(); } class Pianist implements musician{ public void play(){ System.out.println("play piano");} } class Trumpeter implements musician{ public void play(){ System.out.println("play trumpet");} } class Concert{ Concert(){ Pianist p1=new Pianist(); Trumpeter t1=new Trumpeter(); musician m1; m1=p1; m1.play(); m1=t1; m1.play(); } } public class Poly{ public static void main(String[] args){ Concert ct=new Concert(); } }