Java abstract 关键字
abstract是声明抽象类和抽象方法的关键字
包含抽象方法的类叫抽象类,如果一个类中包含一个或多个抽象方法,该类必须被限定为抽象的,否则编译器会报错,抽象类不可创建对象,创建抽象类的对象编译器会报错
- //: interfaces/music4/Music4.java
- // Abstract classes and methods.
- package object;
- import static net.mindview.util.Print.print;
- enum Note {
- MIDDLE_C,MIDDLE_E,MIDDLE_F,
- }
- abstract class Instrument {
- private int i; // Storage allocated for each
- public abstract void play(Note n);
- public String what() { return "Instrument"; }
- public abstract void adjust();
- }
- class Wind extends Instrument {
- public void play(Note n) {
- print("Wind.play() " + n);
- }
- public String what() { return "Wind"; }
- public void adjust() {}
- }
- class Percussion extends Instrument {
- public void play(Note n) {
- print("Percussion.play() " + n);
- }
- public String what() { return "Percussion"; }
- public void adjust() {}
- }
- class Stringed extends Instrument {
- public void play(Note n) {
- print("Stringed.play() " + n);
- }
- public String what() { return "Stringed"; }
- public void adjust() {}
- }
- class Brass extends Wind {
- public void play(Note n) {
- print("Brass.play() " + n);
- }
- public void adjust() { print("Brass.adjust()"); }
- }
- class Woodwind extends Wind {
- public void play(Note n) {
- print("Woodwind.play() " + n);
- }
- public String what() { return "Woodwind"; }
- }
- public class Music4 {
- // Doesn\'t care about type, so new types
- // added to the system still work right:
- static void tune(Instrument i) {
- // ...
- i.play(Note.MIDDLE_C);
- }
- static void tuneAll(Instrument[] e)
- {
- for(Instrument i : e)
- tune(i);
- }
- public static void main(String[] args) {
- // Upcasting during addition to the array:
- Instrument[] orchestra = {
- new Wind(),
- new Percussion(),
- new Stringed(),
- new Brass(),
- new Woodwind()
- };
- tuneAll(orchestra);
- }
- } /* Output:
- Wind.play() MIDDLE_C
- Percussion.play() MIDDLE_C
- Stringed.play() MIDDLE_C
- Brass.play() MIDDLE_C
- Woodwind.play() MIDDLE_C
- *///:~