★ 抽象方法和抽象类
★ 接口
★ 策略设计模式和适配器设计模式
抽象类和抽象方法:
1、 抽象方法
★ 使用关键字 abstract修饰的方法称为抽象方法, 仅有方法声明没有方法体。
2、 抽象类
★包含抽象方法的类称为抽象类,必须也用abstract 关键字声明。用abstract 关键字声明的类一定是抽象类(无论类内是否有抽象函数)
2. 抽象类的性质
Ⅰ 不能创建抽象类的对象,否则编译器报错。但是可以创建抽象类的引用。
Ⅱ 如果继承一个抽象类,没有为基类中的所有抽象方法提供方法定义,那么这个导出类也是抽象类,必须也用abstract 关键字声明。
3. 抽象类的用途
★ 抽象类为它的所有子类创建了一个通用接口,不同的子类使用不同的方式实现此接口
抽象类和抽象方法的典例:
enum Note {CarmeloAnthony, KobeBryant
}abstract class Instrument { // 抽象类public abstract void play(Note n); // 抽象方法public String what() {return "Instrument";}public abstract void adjust();
} // 抽象类中可以包含非抽象方法,抽象函数不能是static和privateclass Wind extends Instrument {public void play(Note n) {System.out.println("Wind.play( ) " + n);}public String what() {System.out.println("here!");return "Wind";}public void adjust() {}
}//子类实现抽象方法与覆盖类似,可以使用协变返回类型,访问权限可以相等或放松。public class Main {public static void main(String[] args) {Instrument fun = new Wind();fun.what();fun.play(Note.CarmeloAnthony);}
}
接口:
1、 接口(Interface)的概念
★ Java中,用interface关键字来创建一个完全抽象的类
◆ 区别:抽象类与接口
2、 接口的创建
★ 接口是一种特殊的抽象类,但在创建时使用interface关键字,接口内的方法不用加abstract关键字.
3、默认访问权限控制:
◆ 抽象类:缺省(包访问权限控制)
◆ 接口:public
接口的性质:
1)只有抽象方法的声明,不能有具体的方法实现(不能有初始化语句块)
2)interface中所有方法的访问权限都是public(缺省),否则编译器报错
3)接口也可以包含域,这些域隐式为public、static和final,必须进行指定初始化。
接口得的实现:
interface MyInterface {// 常量public static final double PI = 3.14159;// 抽象方法public double calculateArea(double radius);// 默认方法public default void printMessage(String message) {System.out.println("Message: " + message);}// 静态方法public static int add(int a, int b) {return a + b;}
}public class exp1 implements MyInterface {@Overridepublic double calculateArea(double radius) {return PI * radius * radius;}@Overridepublic void printMessage(String message) {System.out.println("Overridden message: " + message);}public static void main(String[] args) {exp1 obj = new exp1();System.out.println("Area: " + obj.calculateArea(5.0));obj.printMessage("Hello, world!");System.out.println("Sum: " + MyInterface.add(10, 20));}
}
接口中的域:
★ 接口中的域隐式是static和final的,可以被非常量表达式初始化。
◆ Java SE5以后的版本提供了功能更加
强大和灵活的enum关键字,因此通过
接口来群组常量已经没有什么意义
嵌套接口:
1、 接口嵌套在类中
★ class A
{ interface B
{ void f();}
.....
2、 接口嵌套在其它接口中
★ interface E
{ interface G
{ void f();}
.....