多態性(ポリモーフィズム)
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();
}
}