★ 抽象方法和抽象类
★ 接口
★ 策略设计模式和适配器设计模式
抽象类和抽象方法:
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和private
class 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 {
@Override
public double calculateArea(double radius) {
return PI * radius * radius;
}
@Override
public 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();}
.....