【35】java里的抽象类
1 abstract class Instrument {//抽象类
2 int i;
3 public abstract void play();
4 public String what(){
5 return "Instrument";
6 }
7 public abstract void adjust();
8 }
9
10 class Wind extends Instrument{
11 public void play(){
12 System.out.println("Wind.play()");
13 }
14 public String what(){
15 return "Wind";
16 }
17 public void adjust(){
18
19 }
20 }
21
22 class Percussion extends Instrument{
23 public void play(){
24 System.out.println("Percussion.play()");
25 }
26 public String what(){
27 return "Percussion";
28 }
29 public void adjust(){
30
31 }
32 }
33
34 class Stringed extends Instrument{
35 public void play(){
36 System.out.println("Stringed.play()");
37 }
38 public String what(){
39 return "Stringed";
40 }
41 public void adjust(){
42
43 }
44 }
45
46 class Brass extends Instrument{
47 public void play(){
48 System.out.println("Brass.play()");
49 }
50 public String what(){
51 return "Brass";
52 }
53 public void adjust(){
54
55 }
56 }
57
58 class WoodWind extends Instrument{
59 public void play(){
60 System.out.println("WoodWind.play()");
61 }
62 public String what(){
63 return "WoodWind";
64 }
65 public void adjust(){
66
67 }
68 }
抽象方法的定义形式为:abstract void func();
包含了抽象方法的类就是抽象类,当一个类包含一个或多个抽象方法时,该类就必须明确指定为abstract,不然编译器为报错。
抽象类是不能实例化的,即不能创建抽象类的对象。
如果从一个抽象类继承,子类就必须实现其抽象基类里的所有抽象方法。如果不这样做,那么子类也势必是一个抽象类,且其定义前也要添加abstract关键字。
public class Music {
static void tune(Instrument i){
i.play();
}
static void tuneAll(Instrument[] is){
for(int i = 0;i < is.length;++i){
tune(is[i]);
}
}
/**
* @param args
*/
public static void main(String[] args) {
Instrument[] someInstruments = new Instrument[5];
int i = 0;
someInstruments[i++] = new Wind();
someInstruments[i++] = new Percussion();
someInstruments[i++] = new Stringed();
someInstruments[i++] = new Brass();
someInstruments[i++] = new WoodWind();
tuneAll(someInstruments);
}
}
输出结果为:
Wind.play()
Percussion.play()
Stringed.play()
Brass.play()
WoodWind.play()